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.TipsUniMpDialog
import com.img.rabbit.pages.dialog.TipsUniMpToPageDialog import com.img.rabbit.pages.dialog.TipsUniMpToPageDialog
import com.img.rabbit.pages.dialog.UpdateDialog 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.provider.storage.PreferenceUtil
import com.img.rabbit.utils.AppEventBus import com.img.rabbit.utils.AppEventBus
import com.img.rabbit.utils.AppUpdate import com.img.rabbit.utils.AppUpdate
@ -103,6 +102,7 @@ class MainActivity : ComponentActivity(), LoadingCallback {
setContent { setContent {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
var showSplash by remember { mutableStateOf(false) } var showSplash by remember { mutableStateOf(false) }
val isGlobalLoading by generalViewModel.isLoading.collectAsState()
val context = LocalContext.current val context = LocalContext.current
val loginViewModel: LoginViewModel = viewModel() val loginViewModel: LoginViewModel = viewModel()
@ -110,22 +110,15 @@ class MainActivity : ComponentActivity(), LoadingCallback {
val reportViewModel:ReportViewModel = viewModel() val reportViewModel:ReportViewModel = viewModel()
generalViewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application))[GeneralViewModel::class.java] generalViewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application))[GeneralViewModel::class.java]
val globalStateManager = remember { GlobalStateManager(context) } // 软件更新提示
val updateUniUpdateNotify by globalStateManager.globalUniUpdateNotifyFlow().collectAsState(initial = false) var showUpdateDialog by remember { mutableStateOf(false) }
//重置状态信息(防止异常退出导致状态失效)
LaunchedEffect(Unit) {
globalStateManager.apply {
storeGlobalUniUpdateNotify(false)
}
}
val isGlobalLoading by generalViewModel.isLoading.collectAsState()
// 下载小程序资源(在跳转指定页面时,未下载资源需要提示) // 下载小程序资源(在跳转指定页面时,未下载资源需要提示)
var showUniDownloadDialog by remember { mutableStateOf(false) } var showUniDownloadDialog by remember { mutableStateOf(false) }
var downloadUniEntity by remember { mutableStateOf<UniVersionEntity?>(null) } 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) { LaunchedEffect(Unit) {
GeneralViewModel.GlobalEventBus.events.collect { event -> GeneralViewModel.GlobalEventBus.events.collect { event ->
when (event) { when (event) {
@ -138,8 +131,12 @@ class MainActivity : ComponentActivity(), LoadingCallback {
downloadUniEntity = event.entity downloadUniEntity = event.entity
showUniDownloadDialog = true showUniDownloadDialog = true
} }
// ... 处理其他事件 // 小程序资源更新提示
else -> {} is GeneralViewModel.GlobalEvent.ShowUniUpdateNotify -> {
updateUniEntity = event.entity
showUniUpdateDialog = true
}
// ... 可以处理其他事件
} }
} }
} }
@ -316,8 +313,8 @@ class MainActivity : ComponentActivity(), LoadingCallback {
//UniApp更新提示 //UniApp更新提示
val isDownloadingWGT = mutableStateOf(false) val isDownloadingWGT = mutableStateOf(false)
val progressWGTState = mutableFloatStateOf(0f) val progressWGTState = mutableFloatStateOf(0f)
if(updateUniUpdateNotify == true){ if(showUniUpdateDialog){
UniAppUtils.currentUpdateUniMp?.let { updateUniEntity?.let {
TipsUniMpDialog( TipsUniMpDialog(
title = "资源包更新", title = "资源包更新",
content1 = "是否确定更新资源包", content1 = "是否确定更新资源包",
@ -332,7 +329,7 @@ class MainActivity : ComponentActivity(), LoadingCallback {
if(!isUpdateFinish && !isCancel && data != null){ if(!isUpdateFinish && !isCancel && data != null){
isDownloadingWGT.value = true isDownloadingWGT.value = true
}else{ }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.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateMapOf import androidx.compose.runtime.mutableStateMapOf
@ -55,7 +54,6 @@ import coil3.compose.AsyncImage
import com.img.rabbit.R import com.img.rabbit.R
import com.img.rabbit.components.CenterToast import com.img.rabbit.components.CenterToast
import com.img.rabbit.pages.LoadingCallback import com.img.rabbit.pages.LoadingCallback
import com.img.rabbit.provider.storage.GlobalStateManager
import com.img.rabbit.provider.storage.PreferenceUtil import com.img.rabbit.provider.storage.PreferenceUtil
import com.img.rabbit.route.ScreenRoute import com.img.rabbit.route.ScreenRoute
import com.img.rabbit.utils.UniAppUtils import com.img.rabbit.utils.UniAppUtils
@ -253,9 +251,8 @@ fun HomeScreen(
// 提示更新1、更新释放新版本并启动2、直接启动现有版本 // 提示更新1、更新释放新版本并启动2、直接启动现有版本
UniAppUtils.currentUpdateUniMp = uniMp UniAppUtils.currentUpdateUniMp = uniMp
scope.launch { scope.launch {
GlobalStateManager(context).storeGlobalUniUpdateNotify( GeneralViewModel.GlobalEventBus.emit(
true GeneralViewModel.GlobalEvent.ShowUniUpdateNotify(uniMp))
)
} }
} else { } else {
loadingCallback?.showLoading() loadingCallback?.showLoading()
@ -383,9 +380,8 @@ fun HomeScreen(
// 提示更新1、更新释放新版本并启动2、直接启动现有版本 // 提示更新1、更新释放新版本并启动2、直接启动现有版本
UniAppUtils.currentUpdateUniMp = uniMp UniAppUtils.currentUpdateUniMp = uniMp
scope.launch { scope.launch {
GlobalStateManager(context).storeGlobalUniUpdateNotify( GeneralViewModel.GlobalEventBus.emit(
true GeneralViewModel.GlobalEvent.ShowUniUpdateNotify(uniMp))
)
} }
} else { } else {
loadingCallback?.showLoading() loadingCallback?.showLoading()

View File

@ -9,11 +9,18 @@ import androidx.datastore.preferences.preferencesDataStore
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map 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( class GlobalStateManager(
private val context: Context private val context: Context
) { ) {
/*
companion object { companion object {
private val GLOBAL_UNI_UPDATE_NOTIFY = booleanPreferencesKey("global_uni_update_notify") 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.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.img.rabbit.bean.response.UniVersionEntity import com.img.rabbit.bean.response.UniVersionEntity
import com.img.rabbit.bean.response.VersionEntity
import com.img.rabbit.config.Constants import com.img.rabbit.config.Constants
import com.img.rabbit.provider.api.ApiManager import com.img.rabbit.provider.api.ApiManager
import com.img.rabbit.provider.storage.PreferenceUtil import com.img.rabbit.provider.storage.PreferenceUtil