From 8b6ffa9b7accaabd31e259a6920679a0e24d6e0b Mon Sep 17 00:00:00 2001 From: shenzuqiang Date: Thu, 12 Mar 2026 10:54:28 +0800 Subject: [PATCH] =?UTF-8?q?Dev=EF=BC=9A=201=E3=80=81=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/img/rabbit/MainActivity.kt | 13 +++++++----- .../com/img/rabbit/pages/screen/HomeScreen.kt | 14 +++++++------ .../com/img/rabbit/pages/screen/MineScreen.kt | 6 ++++-- .../java/com/img/rabbit/utils/AppEventBus.kt | 20 +++++++++++++++++++ .../img/rabbit/viewmodel/GeneralViewModel.kt | 17 ---------------- .../img/rabbit/viewmodel/LoginViewModel.kt | 6 ++++-- 6 files changed, 44 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/img/rabbit/MainActivity.kt b/app/src/main/java/com/img/rabbit/MainActivity.kt index 48c518b..be0e4c1 100644 --- a/app/src/main/java/com/img/rabbit/MainActivity.kt +++ b/app/src/main/java/com/img/rabbit/MainActivity.kt @@ -73,6 +73,8 @@ import com.img.rabbit.utils.AppEventBus import com.img.rabbit.utils.AppUpdate import com.img.rabbit.utils.ChannelUtils import com.img.rabbit.utils.FileUtils +import com.img.rabbit.utils.GlobalEvent +import com.img.rabbit.utils.GlobalEventBus import com.img.rabbit.utils.LoginBindEvent import com.img.rabbit.utils.UniAppUtils import com.img.rabbit.utils.UniMpUpdate @@ -102,13 +104,14 @@ 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() val splashViewModel: SplashViewModel = viewModel() val reportViewModel:ReportViewModel = viewModel() generalViewModel = ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(application))[GeneralViewModel::class.java] + // isGlobalLoading请勿前置,会导致初始化问题 + val isGlobalLoading by generalViewModel.isLoading.collectAsState() // 软件更新提示 var showUpdateDialog by remember { mutableStateOf(false) } @@ -120,19 +123,19 @@ class MainActivity : ComponentActivity(), LoadingCallback { var updateUniEntity by remember { mutableStateOf(null) } //以下为流事件收集订阅 LaunchedEffect(Unit) { - GeneralViewModel.GlobalEventBus.events.collect { event -> + GlobalEventBus.events.collect { event -> when (event) { // 软件更新提示 - is GeneralViewModel.GlobalEvent.ShowAppUpdateNotify -> { + is GlobalEvent.ShowAppUpdateNotify -> { showUpdateDialog = true } // 小程序资源下载提示 - is GeneralViewModel.GlobalEvent.ShowUniDownloadNotify -> { + is GlobalEvent.ShowUniDownloadNotify -> { downloadUniEntity = event.entity showUniDownloadDialog = true } // 小程序资源更新提示 - is GeneralViewModel.GlobalEvent.ShowUniUpdateNotify -> { + is GlobalEvent.ShowUniUpdateNotify -> { updateUniEntity = event.entity showUniUpdateDialog = true } 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 2631fd9..858a906 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 @@ -56,6 +56,8 @@ import com.img.rabbit.components.CenterToast import com.img.rabbit.pages.LoadingCallback import com.img.rabbit.provider.storage.PreferenceUtil import com.img.rabbit.route.ScreenRoute +import com.img.rabbit.utils.GlobalEvent +import com.img.rabbit.utils.GlobalEventBus import com.img.rabbit.utils.UniAppUtils import com.img.rabbit.utils.UniMpUpdate import com.img.rabbit.viewmodel.GeneralViewModel @@ -251,8 +253,8 @@ fun HomeScreen( // 提示更新(1、更新释放新版本并启动;2、直接启动现有版本) UniAppUtils.currentUpdateUniMp = uniMp scope.launch { - GeneralViewModel.GlobalEventBus.emit( - GeneralViewModel.GlobalEvent.ShowUniUpdateNotify(uniMp)) + GlobalEventBus.emit( + GlobalEvent.ShowUniUpdateNotify(uniMp)) } } else { loadingCallback?.showLoading() @@ -380,8 +382,8 @@ fun HomeScreen( // 提示更新(1、更新释放新版本并启动;2、直接启动现有版本) UniAppUtils.currentUpdateUniMp = uniMp scope.launch { - GeneralViewModel.GlobalEventBus.emit( - GeneralViewModel.GlobalEvent.ShowUniUpdateNotify(uniMp)) + GlobalEventBus.emit( + GlobalEvent.ShowUniUpdateNotify(uniMp)) } } else { loadingCallback?.showLoading() @@ -478,8 +480,8 @@ fun HomeScreen( if(!wgtExists){ //是否下载 scope.launch { - GeneralViewModel.GlobalEventBus.emit( - GeneralViewModel.GlobalEvent.ShowUniDownloadNotify(uniVersion)) + GlobalEventBus.emit( + GlobalEvent.ShowUniDownloadNotify(uniVersion)) } }else { UniAppUtils.startUniMpPage(context = context, uniMpId = uniMpId, uniMpType = item.type, pagePath = item.url, reportViewModel = reportViewModel) diff --git a/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt b/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt index f3151d4..a9034f3 100644 --- a/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt +++ b/app/src/main/java/com/img/rabbit/pages/screen/MineScreen.kt @@ -51,6 +51,8 @@ import com.img.rabbit.components.CenterToast import com.img.rabbit.provider.storage.PreferenceUtil import com.img.rabbit.route.ScreenRoute import com.img.rabbit.utils.AppUpdate +import com.img.rabbit.utils.GlobalEvent +import com.img.rabbit.utils.GlobalEventBus import com.img.rabbit.viewmodel.GeneralViewModel import com.img.rabbit.viewmodel.LoginViewModel import com.img.rabbit.viewmodel.MineViewModel @@ -449,8 +451,8 @@ fun MineScreen( //提示执行更新 //startUpdate(result, fragment) scope.launch { - GeneralViewModel.GlobalEventBus.emit( - GeneralViewModel.GlobalEvent.ShowAppUpdateNotify) + GlobalEventBus.emit( + GlobalEvent.ShowAppUpdateNotify) } } else { CenterToast.show(tips) diff --git a/app/src/main/java/com/img/rabbit/utils/AppEventBus.kt b/app/src/main/java/com/img/rabbit/utils/AppEventBus.kt index a510a33..07c4cb1 100644 --- a/app/src/main/java/com/img/rabbit/utils/AppEventBus.kt +++ b/app/src/main/java/com/img/rabbit/utils/AppEventBus.kt @@ -1,5 +1,6 @@ package com.img.rabbit.utils +import com.img.rabbit.bean.response.UniVersionEntity import com.img.rabbit.pages.LoginScreenType import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow @@ -60,3 +61,22 @@ sealed class WXAuthEvent { sealed class UniMpWXPayEvent { data class PayResult(val code: Int) : UniMpWXPayEvent() } + + + +// 可以定义一个事件密封类,方便扩展 +sealed class GlobalEvent { + object ShowAppUpdateNotify : GlobalEvent() + data class ShowUniDownloadNotify(val entity: UniVersionEntity) : GlobalEvent() + data class ShowUniUpdateNotify(val entity: UniVersionEntity) : GlobalEvent() +} + +object GlobalEventBus { + // replay = 0 确保事件是瞬时的,不会给新订阅者发送旧事件 + private val _events = MutableSharedFlow(extraBufferCapacity = 64) + val events = _events.asSharedFlow() + + suspend fun emit(event: GlobalEvent) { + _events.emit(event) + } +} 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 59e5d10..94017ac 100644 --- a/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt +++ b/app/src/main/java/com/img/rabbit/viewmodel/GeneralViewModel.kt @@ -41,23 +41,6 @@ class GeneralViewModel: BaseViewModel(){ private val _isNavigationBarVisible = MutableLiveData() val isNavigationBarVisible: LiveData = _isNavigationBarVisible - // 可以定义一个事件密封类,方便扩展 - sealed class GlobalEvent { - object ShowAppUpdateNotify : GlobalEvent() - data class ShowUniDownloadNotify(val entity: UniVersionEntity) : GlobalEvent() - data class ShowUniUpdateNotify(val entity: UniVersionEntity) : GlobalEvent() - } - - object GlobalEventBus { - // replay = 0 确保事件是瞬时的,不会给新订阅者发送旧事件 - private val _events = MutableSharedFlow(extraBufferCapacity = 64) - val events = _events.asSharedFlow() - - suspend fun emit(event: GlobalEvent) { - _events.emit(event) - } - } - private val connectivityManager = HeadParamUtils.applicationContext?.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager diff --git a/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt b/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt index 0a166fd..b3df1ac 100644 --- a/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/com/img/rabbit/viewmodel/LoginViewModel.kt @@ -29,6 +29,8 @@ import com.img.rabbit.provider.storage.PreferenceUtil import com.img.rabbit.provider.utils.HeadParamUtils.applicationContext import com.img.rabbit.utils.AppEventBus import com.img.rabbit.utils.AppUpdate +import com.img.rabbit.utils.GlobalEvent +import com.img.rabbit.utils.GlobalEventBus import com.img.rabbit.utils.LoginBindEvent import com.img.rabbit.utils.MMKVUtils import com.img.rabbit.utils.StringUtils @@ -114,8 +116,8 @@ class LoginViewModel : BaseViewModel() { // 有更新,提示更新 viewModelScope.launch{ versionEntity?.let { - GeneralViewModel.GlobalEventBus.emit( - GeneralViewModel.GlobalEvent.ShowAppUpdateNotify) + GlobalEventBus.emit( + GlobalEvent.ShowAppUpdateNotify) } } }