Reset ViewModels on logout/account switch

This commit introduces a `ResetModel()` function to `AgentViewModel` and `MineAgentViewModel` to clear their state.

This function is now called in `ResourceCleanupManager` and `AppState` during logout or when switching accounts to ensure that data from the previous session is not retained.

Additionally, the search and group name input fields in `CreateGroupChatScreen` are now single-line.
This commit is contained in:
2025-09-01 15:36:22 +08:00
parent 5c12982908
commit 36d322ef8c
5 changed files with 39 additions and 16 deletions

View File

@@ -25,6 +25,8 @@ import com.aiosman.ravenow.ui.index.tabs.moment.tabs.timeline.TimelineMomentView
import com.aiosman.ravenow.ui.index.tabs.profile.MyProfileViewModel
import com.aiosman.ravenow.ui.index.tabs.search.DiscoverViewModel
import com.aiosman.ravenow.ui.index.tabs.search.SearchViewModel
import com.aiosman.ravenow.ui.index.tabs.ai.AgentViewModel
import com.aiosman.ravenow.ui.index.tabs.ai.tabs.mine.MineAgentViewModel
import com.aiosman.ravenow.ui.like.LikeNoticeViewModel
import com.aiosman.ravenow.utils.Utils
import com.tencent.imsdk.v2.V2TIMCallback
@@ -212,6 +214,9 @@ object AppState {
FollowerNoticeViewModel.ResetModel()
// 重置关注通知页面
IndexViewModel.ResetModel()
// 重置AI Agent相关页面
AgentViewModel.ResetModel()
MineAgentViewModel.ResetModel()
UserId = null
// 清除游客状态

View File

@@ -197,6 +197,7 @@ fun CreateGroupChatScreen() {
fontSize = 14.sp
),
modifier = Modifier.weight(1f),
singleLine = true,
decorationBox = { innerTextField ->
Box {
if (searchText.text.isEmpty()) {
@@ -277,6 +278,7 @@ fun CreateGroupChatScreen() {
),
modifier = Modifier
.weight(1f),
singleLine = true,
decorationBox = { innerTextField ->
Box(Modifier.fillMaxWidth()) {
if (groupName.text.isEmpty()) {

View File

@@ -95,4 +95,14 @@ object AgentViewModel: ViewModel() {
}
}
/**
* 重置ViewModel状态用于登出或切换账号时清理数据
*/
fun ResetModel() {
agentItems = emptyList()
errorMessage = null
isRefreshing = false
isLoading = false
}
}

View File

@@ -139,5 +139,23 @@ object MineAgentViewModel : ViewModel() {
}
}
/**
* 重置ViewModel状态用于登出或切换账号时清理数据
*/
fun ResetModel() {
// 重置状态变量
refreshing = false
isLoading = false
hasNext = true
currentPage = 1
error = null
isFirstLoad = true
// 清除预加载的图片ID
preloadedImageIds.clear()
// 清空PagingData
_agentList.value = PagingData.empty()
}
}

View File

@@ -63,7 +63,7 @@ object ResourceCleanupManager {
IndexViewModel.ResetModel()
// 重置AI相关ViewModel
// AgentViewModel的属性是私有的,无法直接访问,通过其他方式清理
AgentViewModel.ResetModel()
HotAgentViewModel.let {
it.agentList = emptyList()
@@ -75,13 +75,7 @@ object ResourceCleanupManager {
it.clearPreloadedImages()
}
MineAgentViewModel.let {
it.refreshing = false
it.isLoading = false
it.hasNext = true
it.currentPage = 1
it.error = null
}
MineAgentViewModel.ResetModel()
// 重置动态相关ViewModel
TimelineMomentViewModel.ResetModel()
@@ -220,7 +214,7 @@ object ResourceCleanupManager {
fun cleanupPageResources(pageType: String) {
when (pageType) {
"ai" -> {
// AgentViewModel的属性是私有的,无法直接访问
AgentViewModel.ResetModel()
HotAgentViewModel.let {
it.agentList = emptyList()
it.refreshing = false
@@ -230,13 +224,7 @@ object ResourceCleanupManager {
it.error = null
it.clearPreloadedImages()
}
MineAgentViewModel.let {
it.refreshing = false
it.isLoading = false
it.hasNext = true
it.currentPage = 1
it.error = null
}
MineAgentViewModel.ResetModel()
}
"moment" -> {
TimelineMomentViewModel.ResetModel()