From 4883f4cba00701a7717de627a3c8fbf4ff796522 Mon Sep 17 00:00:00 2001 From: shenzuqiang Date: Thu, 12 Mar 2026 10:42:50 +0800 Subject: [PATCH] =?UTF-8?q?Dev=EF=BC=9A=201=E3=80=81=E6=89=80=E6=9C=89?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=94=B9=E7=94=A8=E5=86=B7=E6=B5=81=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/img/rabbit/MainActivity.kt | 35 +++++++++---------- .../com/img/rabbit/pages/screen/HomeScreen.kt | 12 +++---- .../provider/storage/GlobalStateManager.kt | 11 +++++- .../img/rabbit/viewmodel/GeneralViewModel.kt | 1 - 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/img/rabbit/MainActivity.kt b/app/src/main/java/com/img/rabbit/MainActivity.kt index b291c50..48c518b 100644 --- a/app/src/main/java/com/img/rabbit/MainActivity.kt +++ b/app/src/main/java/com/img/rabbit/MainActivity.kt @@ -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(null) } - // 软件更新提示 - var showUpdateDialog by remember { mutableStateOf(false) } - + // 小程序资源更新提示 + var showUniUpdateDialog by remember { mutableStateOf(false) } + var updateUniEntity by remember { mutableStateOf(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 } } ) diff --git a/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt b/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt index 1ffd52a..2631fd9 100644 --- a/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt +++ b/app/src/main/java/com/img/rabbit/pages/screen/HomeScreen.kt @@ -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() diff --git a/app/src/main/java/com/img/rabbit/provider/storage/GlobalStateManager.kt b/app/src/main/java/com/img/rabbit/provider/storage/GlobalStateManager.kt index 700593f..5b26c13 100644 --- a/app/src/main/java/com/img/rabbit/provider/storage/GlobalStateManager.kt +++ b/app/src/main/java/com/img/rabbit/provider/storage/GlobalStateManager.kt @@ -9,11 +9,18 @@ import androidx.datastore.preferences.preferencesDataStore import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -private val Context.storeData: DataStore by preferencesDataStore(name = "global_state") +private val Context.storeData: DataStore 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( } } + */ + } \ No newline at end of file diff --git a/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt b/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt index 90044a2..59e5d10 100644 --- a/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt +++ b/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt @@ -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