1、优化账号切换代码
This commit is contained in:
shenzuqiang 2026-03-12 15:39:23 +08:00
parent 86bc47ca7f
commit 1f1cb1ba55
4 changed files with 15 additions and 18 deletions

View File

@ -4,7 +4,7 @@
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-03-12T03:05:40.770377400Z"> <DropdownSelection timestamp="2026-03-12T07:23:49.466247900Z">
<Target type="DEFAULT_BOOT"> <Target type="DEFAULT_BOOT">
<handle> <handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=JRBI89BIE6AI5TG6" /> <DeviceId pluginId="PhysicalDevice" identifier="serial=JRBI89BIE6AI5TG6" />

View File

@ -224,7 +224,7 @@ fun MainScreen(generalViewModel: GeneralViewModel, loginViewModel: LoginViewMode
AccountBindScreen(navController = navController) AccountBindScreen(navController = navController)
} }
composable(ScreenRoute.ManagerAccount.route) { composable(ScreenRoute.ManagerAccount.route) {
AccountManagerScreen(navController = navController, loginViewModel = loginViewModel) AccountManagerScreen(navController = navController)
} }
composable(ScreenRoute.AboutMine.route) { composable(ScreenRoute.AboutMine.route) {
AboutScreen(navController = navController) AboutScreen(navController = navController)

View File

@ -1,6 +1,5 @@
package com.img.rabbit.pages.screen.mine.setting package com.img.rabbit.pages.screen.mine.setting
import android.annotation.SuppressLint
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
@ -34,7 +33,6 @@ import androidx.compose.ui.draw.scale
import androidx.compose.ui.draw.shadow import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@ -51,20 +49,16 @@ import com.img.rabbit.components.CenterToast
import com.img.rabbit.pages.dialog.TipsDialog import com.img.rabbit.pages.dialog.TipsDialog
import com.img.rabbit.pages.toolbar.TitleBar import com.img.rabbit.pages.toolbar.TitleBar
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.LoginBindEvent
import com.img.rabbit.viewmodel.AccountManagerViewModel import com.img.rabbit.viewmodel.AccountManagerViewModel
import com.img.rabbit.viewmodel.LoginViewModel import com.img.rabbit.viewmodel.LoginViewModel
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@SuppressLint("UnrememberedMutableState")
@Composable @Composable
fun AccountManagerScreen(navController: NavHostController, viewModel: AccountManagerViewModel = viewModel(), loginViewModel: LoginViewModel) { fun AccountManagerScreen(navController: NavHostController, viewModel: AccountManagerViewModel = viewModel()) {
val context = LocalContext.current var showDialogStatus by remember { mutableStateOf(false) }
var showDialogStatus by mutableStateOf(false) var selectedUserInfo by remember { mutableStateOf<UserInfoEntity?>(null) }
var selectedUserInfo by mutableStateOf<UserInfoEntity?>(null)
val userList by remember { viewModel.accountState } val userList by viewModel.accountState
LaunchedEffect(Unit) { LaunchedEffect(Unit) {
viewModel.requestAccount() viewModel.requestAccount()
@ -72,11 +66,6 @@ fun AccountManagerScreen(navController: NavHostController, viewModel: AccountMan
LaunchedEffect(viewModel.switchState.value) { LaunchedEffect(viewModel.switchState.value) {
if (viewModel.switchState.value != null && viewModel.switchState.value?.data?.token != null) { if (viewModel.switchState.value != null && viewModel.switchState.value?.data?.token != null) {
val loginInfo = viewModel.switchState.value?.data
PreferenceUtil.saveLoginType(null)
loginInfo?.let { PreferenceUtil.saveLoginInfo(it) }
PreferenceUtil.saveAccessToken(viewModel.switchState.value?.data?.token)
AppEventBus.post( LoginBindEvent.Login(userId = loginInfo?.user_id?:"", loginType = null, isLogin = true, data = loginInfo) )
CenterToast.show("切换账号成功!") CenterToast.show("切换账号成功!")
//延迟执行,确保返回时,接口已经拿到最新的用户信息 //延迟执行,确保返回时,接口已经拿到最新的用户信息
@ -336,5 +325,5 @@ private fun AddItem(navController: NavController){
@Preview(showBackground = true) @Preview(showBackground = true)
@Composable @Composable
private fun PreviewAccountManagerScreen(){ private fun PreviewAccountManagerScreen(){
AccountManagerScreen(navController = rememberNavController(), loginViewModel = viewModel()) AccountManagerScreen(navController = rememberNavController())
} }

View File

@ -8,6 +8,9 @@ import com.img.rabbit.bean.response.LoginInfoEntity
import com.img.rabbit.bean.response.UserInfoEntity import com.img.rabbit.bean.response.UserInfoEntity
import com.img.rabbit.provider.api.ApiManager import com.img.rabbit.provider.api.ApiManager
import com.img.rabbit.provider.api.ResultVo import com.img.rabbit.provider.api.ResultVo
import com.img.rabbit.provider.storage.PreferenceUtil
import com.img.rabbit.utils.AppEventBus
import com.img.rabbit.utils.LoginBindEvent
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
class AccountManagerViewModel : BaseViewModel() { class AccountManagerViewModel : BaseViewModel() {
@ -43,6 +46,11 @@ class AccountManagerViewModel : BaseViewModel() {
mLaunch { mLaunch {
val response = ApiManager.serviceVo.login(jsonObject.toString().toRequestBody()) val response = ApiManager.serviceVo.login(jsonObject.toString().toRequestBody())
if (response.status) { if (response.status) {
val loginInfo = response.data
PreferenceUtil.saveLoginType(null)
PreferenceUtil.saveLoginInfo(loginInfo)
PreferenceUtil.saveAccessToken(loginInfo.token)
AppEventBus.post( LoginBindEvent.Login(userId = loginInfo.user_id, loginType = null, isLogin = true, data = loginInfo) )
// 处理切换账号 // 处理切换账号
switchState.value = response switchState.value = response
}else{ }else{