diff --git a/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/DynamicsScreen.kt b/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/DynamicsScreen.kt index 73ef756e..a56e2649 100644 --- a/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/DynamicsScreen.kt +++ b/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/DynamicsScreen.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember @@ -47,10 +48,18 @@ fun DynamicsScreen( val context = LocalContext.current val scope = rememberCoroutineScope() var currentFocusedIndex by remember { mutableIntStateOf(0) } + val shouldLoadMore by remember { + derivedStateOf { currentFocusedIndex + 24 > dynamicViewModel.dynamicList.size } + } - LaunchedEffect(currentFocusedIndex) { - if (currentFocusedIndex + 24 > dynamicViewModel.dynamicList.size) { - scope.launch(Dispatchers.Default) { dynamicViewModel.loadMore() } + //不能直接使用 LaunchedEffect(currentFocusedIndex),会导致整个页面重组 + LaunchedEffect(shouldLoadMore) { + if (shouldLoadMore) { + scope.launch(Dispatchers.IO) { + dynamicViewModel.loadMore() + //加载完成后重置shouldLoadMore为false,避免如果加载失败后无法重新加载 + currentFocusedIndex = -100 + } } } diff --git a/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/PopularScreen.kt b/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/PopularScreen.kt index 20b4fdf1..d85fea44 100644 --- a/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/PopularScreen.kt +++ b/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/PopularScreen.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember @@ -44,10 +45,17 @@ fun PopularScreen( val context = LocalContext.current val scope = rememberCoroutineScope() var currentFocusedIndex by remember { mutableIntStateOf(0) } + val shouldLoadMore by remember { + derivedStateOf { currentFocusedIndex + 24 > popularViewModel.popularVideoList.size } + } - LaunchedEffect(currentFocusedIndex) { - if (currentFocusedIndex + 24 > popularViewModel.popularVideoList.size) { - scope.launch(Dispatchers.IO) { popularViewModel.loadMore() } + LaunchedEffect(shouldLoadMore) { + if (shouldLoadMore) { + scope.launch(Dispatchers.IO) { + popularViewModel.loadMore() + //加载完成后重置shouldLoadMore为false,避免如果加载失败后无法重新加载 + currentFocusedIndex = -100 + } } } diff --git a/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/RecommendScreen.kt b/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/RecommendScreen.kt index 66f8f8df..eb90c3d2 100644 --- a/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/RecommendScreen.kt +++ b/app/src/main/kotlin/dev/aaa1115910/bv/screen/home/RecommendScreen.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.itemsIndexed import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember @@ -44,10 +45,18 @@ fun RecommendScreen( val context = LocalContext.current val scope = rememberCoroutineScope() var currentFocusedIndex by remember { mutableIntStateOf(0) } + val shouldLoadMore by remember { + derivedStateOf { currentFocusedIndex + 24 > recommendViewModel.recommendVideoList.size } + } - LaunchedEffect(currentFocusedIndex) { - if (currentFocusedIndex + 24 > recommendViewModel.recommendVideoList.size) { - scope.launch(Dispatchers.IO) { recommendViewModel.loadMore() } + //不能直接使用 LaunchedEffect(currentFocusedIndex),会导致整个页面重组 + LaunchedEffect(shouldLoadMore) { + if (shouldLoadMore) { + scope.launch(Dispatchers.IO) { + recommendViewModel.loadMore() + //加载完成后重置shouldLoadMore为false,避免如果加载失败后无法重新加载 + currentFocusedIndex = -100 + } } }