Ank*_*hah 5 android kotlin android-jetpack android-jetpack-compose
我的 HiltViewModel 中有一个 mutableStateof,名为“loading”。我正在更新从视图模型中的函数加载的值,该值被传递给 @composable 函数并在那里使用。情况是加载值在 viewModel 中完美更新,但没有反映在 @Composable 函数中。我的视图模型是:
@HiltViewModel
class AuthenticationViewModel @Inject constructor(
private val repository: AppRepository,
application: Application
): ViewModel() {
val loading = mutableStateOf(false)
fun update() = viewModelScope.launch {
loading.value = true
}
}
Run Code Online (Sandbox Code Playgroud)
加载值已在此处更新,但未反映在 @composable 中
@Composable
fun LoginScreen(
viewModel: AuthenticationViewModel,
actions: MainActions
) {
val loading = viewModel.loading.value
//Loading is another composable function where bool value is passed
Loading(state = loading)
CustomNavigationButton(title = "Sign In",enabled = true,onClick =
{viewModel.update()})
}
Run Code Online (Sandbox Code Playgroud)
现在,当我单击导航按钮时,将调用视图模型函数,并且加载状态也会更新,但不会反映在 @Composable 中
加载可组合项是:
@Composable
fun Loading(state:Boolean) {
var showDialog by remember { mutableStateOf(state) }
if(showDialog){
Dialog(onDismissRequest = { showDialog = false }, DialogProperties(
dismissOnBackPress = false,dismissOnClickOutside = false
)) {
Box(
modifier = Modifier.size(100.dp).background(Color.White, shape = RoundedCornerShape(8.dp)),
contentAlignment= Alignment.Center,
){
CircularProgressIndicator()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题出在 Loader 可组合函数中。if 条件始终设置为 false,因为可变状态在该特定可组合函数中永远不会更新。替换:
@Composable
fun Loading(state:Boolean) {
var showDialog by remember { mutableStateOf(state) }
if(showDialog){
Dialog(onDismissRequest = { showDialog = false }, DialogProperties(
dismissOnBackPress = false,dismissOnClickOutside = false
)) {
Box(
modifier = Modifier.size(100.dp).background(Color.White, shape = RoundedCornerShape(8.dp)),
contentAlignment= Alignment.Center,
){
CircularProgressIndicator()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和
@Composable
fun Loading(state:Boolean) {
if(state){
Dialog(onDismissRequest = {}, DialogProperties(
dismissOnBackPress = false,dismissOnClickOutside = false
)) {
Box(
modifier = Modifier.size(100.dp).background(Color.White, shape = RoundedCornerShape(8.dp)),
contentAlignment= Alignment.Center,
){
CircularProgressIndicator()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5287 次 |
最近记录: |