朋友圈刷新方式调整

This commit is contained in:
2025-09-01 15:02:39 +08:00
parent 76bcb1e7fc
commit 4d319351b7
2 changed files with 34 additions and 6 deletions

View File

@@ -3,6 +3,7 @@ package com.aiosman.ravenow.ui.index.tabs.moment
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
// import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aiosman.ravenow.data.MomentService
@@ -27,7 +28,8 @@ open class BaseMomentModel :ViewModel(){
val momentLoader = MomentLoader().apply {
onListChanged = {
moments = it
// 使用新实例触发 Compose 重组
moments = it.toList()
}
}
var refreshing by mutableStateOf(false)
@@ -50,7 +52,8 @@ open class BaseMomentModel :ViewModel(){
fun loadMore() {
viewModelScope.launch {
momentLoader.loadMore(extraArgs())
moments = momentLoader.list
// 使用新实例触发 Compose 重组
moments = momentLoader.list.toList()
}
}

View File

@@ -13,8 +13,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import com.aiosman.ravenow.GuestLoginCheckOut
@@ -31,7 +33,7 @@ import kotlinx.coroutines.launch
@Composable
fun Dynamic() {
val model = DynamicViewModel
var moments = model.moments
val moments = model.moments
val navController = LocalNavController.current
val scope = rememberCoroutineScope()
@@ -42,23 +44,46 @@ fun Dynamic() {
})
val listState = rememberLazyListState()
// observe list scrolling
// 用于跟踪是否已经触发过加载更多
var hasTriggeredLoadMore by remember { mutableStateOf(false) }
// observe list scrolling with simplified logic
val reachedBottom by remember {
derivedStateOf {
val lastVisibleItem = listState.layoutInfo.visibleItemsInfo.lastOrNull()
lastVisibleItem?.index != 0 && lastVisibleItem?.index == listState.layoutInfo.totalItemsCount - 2
val layoutInfo = listState.layoutInfo
val lastVisibleItem = layoutInfo.visibleItemsInfo.lastOrNull()
val totalItems = layoutInfo.totalItemsCount
if (lastVisibleItem == null || totalItems == 0) {
false
} else {
val isLastItemVisible = lastVisibleItem.index >= totalItems - 2
// 简化逻辑:只要滑动到底部且还没有触发过,就触发加载
isLastItemVisible && !hasTriggeredLoadMore
}
}
}
// load more if scrolled to bottom
LaunchedEffect(reachedBottom) {
if (reachedBottom) {
hasTriggeredLoadMore = true
model.loadMore()
}
}
LaunchedEffect(Unit) {
model.refreshPager()
}
// 监听数据变化,重置加载状态
LaunchedEffect(moments.size) {
if (moments.size > 0) {
// 延迟重置,确保数据已经稳定
kotlinx.coroutines.delay(500)
hasTriggeredLoadMore = false
}
}
Column(
modifier = Modifier
.fillMaxSize()