1、所有状态改用冷流通知处理
This commit is contained in:
shenzuqiang 2026-03-12 10:42:50 +08:00
parent 8c21b3127e
commit 4883f4cba0
4 changed files with 30 additions and 29 deletions

View File

@ -68,7 +68,6 @@ import com.img.rabbit.pages.MainScreen
import com.img.rabbit.pages.dialog.TipsUniMpDialog
import com.img.rabbit.pages.dialog.TipsUniMpToPageDialog
import com.img.rabbit.pages.dialog.UpdateDialog
import com.img.rabbit.provider.storage.GlobalStateManager
import com.img.rabbit.provider.storage.PreferenceUtil
import com.img.rabbit.utils.AppEventBus
import com.img.rabbit.utils.AppUpdate
@ -103,6 +102,7 @@ class MainActivity : ComponentActivity(), LoadingCallback {
setContent {
val coroutineScope = rememberCoroutineScope()
var showSplash by remember { mutableStateOf(false) }
val isGlobalLoading by generalViewModel.isLoading.collectAsState()
val context = LocalContext.current
val loginViewModel: LoginViewModel = viewModel()
@ -110,22 +110,15 @@ class MainActivity : ComponentActivity(), LoadingCallback {
val reportViewModel:ReportViewModel = viewModel()
generalViewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application))[GeneralViewModel::class.java]
val globalStateManager = remember { GlobalStateManager(context) }
val updateUniUpdateNotify by globalStateManager.globalUniUpdateNotifyFlow().collectAsState(initial = false)
//重置状态信息(防止异常退出导致状态失效)
LaunchedEffect(Unit) {
globalStateManager.apply {
storeGlobalUniUpdateNotify(false)
}
}
val isGlobalLoading by generalViewModel.isLoading.collectAsState()
// 软件更新提示
var showUpdateDialog by remember { mutableStateOf(false) }
// 下载小程序资源(在跳转指定页面时,未下载资源需要提示)
var showUniDownloadDialog by remember { mutableStateOf(false) }
var downloadUniEntity by remember { mutableStateOf<UniVersionEntity?>(null) }
// 软件更新提示
var showUpdateDialog by remember { mutableStateOf(false) }
// 小程序资源更新提示
var showUniUpdateDialog by remember { mutableStateOf(false) }
var updateUniEntity by remember { mutableStateOf<UniVersionEntity?>(null) }
//以下为流事件收集订阅
LaunchedEffect(Unit) {
GeneralViewModel.GlobalEventBus.events.collect { event ->
when (event) {
@ -138,8 +131,12 @@ class MainActivity : ComponentActivity(), LoadingCallback {
downloadUniEntity = event.entity
showUniDownloadDialog = true
}
// ... 处理其他事件
else -> {}
// 小程序资源更新提示
is GeneralViewModel.GlobalEvent.ShowUniUpdateNotify -> {
updateUniEntity = event.entity
showUniUpdateDialog = true
}
// ... 可以处理其他事件
}
}
}
@ -316,8 +313,8 @@ class MainActivity : ComponentActivity(), LoadingCallback {
//UniApp更新提示
val isDownloadingWGT = mutableStateOf(false)
val progressWGTState = mutableFloatStateOf(0f)
if(updateUniUpdateNotify == true){
UniAppUtils.currentUpdateUniMp?.let {
if(showUniUpdateDialog){
updateUniEntity?.let {
TipsUniMpDialog(
title = "资源包更新",
content1 = "是否确定更新资源包",
@ -332,7 +329,7 @@ class MainActivity : ComponentActivity(), LoadingCallback {
if(!isUpdateFinish && !isCancel && data != null){
isDownloadingWGT.value = true
}else{
coroutineScope.launch { globalStateManager.storeGlobalUniUpdateNotify(false) }
showUniUpdateDialog = false
}
}
)

View File

@ -28,7 +28,6 @@ import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateMapOf
@ -55,7 +54,6 @@ import coil3.compose.AsyncImage
import com.img.rabbit.R
import com.img.rabbit.components.CenterToast
import com.img.rabbit.pages.LoadingCallback
import com.img.rabbit.provider.storage.GlobalStateManager
import com.img.rabbit.provider.storage.PreferenceUtil
import com.img.rabbit.route.ScreenRoute
import com.img.rabbit.utils.UniAppUtils
@ -253,9 +251,8 @@ fun HomeScreen(
// 提示更新1、更新释放新版本并启动2、直接启动现有版本
UniAppUtils.currentUpdateUniMp = uniMp
scope.launch {
GlobalStateManager(context).storeGlobalUniUpdateNotify(
true
)
GeneralViewModel.GlobalEventBus.emit(
GeneralViewModel.GlobalEvent.ShowUniUpdateNotify(uniMp))
}
} else {
loadingCallback?.showLoading()
@ -383,9 +380,8 @@ fun HomeScreen(
// 提示更新1、更新释放新版本并启动2、直接启动现有版本
UniAppUtils.currentUpdateUniMp = uniMp
scope.launch {
GlobalStateManager(context).storeGlobalUniUpdateNotify(
true
)
GeneralViewModel.GlobalEventBus.emit(
GeneralViewModel.GlobalEvent.ShowUniUpdateNotify(uniMp))
}
} else {
loadingCallback?.showLoading()

View File

@ -9,11 +9,18 @@ import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
private val Context.storeData: DataStore<Preferences> by preferencesDataStore(name = "global_state")
private val Context.storeData: DataStore<Preferences> by preferencesDataStore(name = "global_store")
/**
* 可用于全局存储
* 注意
* 1. 该类的状态仅在当前应用进程内有效不建议用于跨进程通信
* 2. 该类存储执行IO操作不建议简单通知场景使用如全局通知建议使用StateFlow
*/
class GlobalStateManager(
private val context: Context
) {
/*
companion object {
private val GLOBAL_UNI_UPDATE_NOTIFY = booleanPreferencesKey("global_uni_update_notify")
}
@ -31,4 +38,6 @@ class GlobalStateManager(
}
}
*/
}

View File

@ -16,7 +16,6 @@ import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.img.rabbit.bean.response.UniVersionEntity
import com.img.rabbit.bean.response.VersionEntity
import com.img.rabbit.config.Constants
import com.img.rabbit.provider.api.ApiManager
import com.img.rabbit.provider.storage.PreferenceUtil