我正在使用Jetpack Compose的新android启动屏幕。我的应用程序逻辑有问题。它有一个显示屏幕(onboarding),在它的最后一页,它有一个按钮来确认,在这个确认中,我在DataStore中保存一个布尔变量为true。
我做的逻辑,我的启动屏幕卡住了,我不知道我哪里出错了。遵循代码:
MainActivity
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
private val viewModel: SplashViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var keepSplashOpened = viewModel.state.keepSplashOpened
installSplashScreen().setKeepOnScreenCondition {
keepSplashOpened
}
setContent {
val window = rememberWindowSizeClass()
KippTheme(window) {
val graph = viewModel.state.graphs
RootNavigationGraph(
graph = graph,
onDataLoaded = {
keepSplashOpened = false
}
)
}
}
}
}
SplashViewModel
@HiltViewModel
class SplashViewModel @Inject constructor(
private val readOnBoardingUseCase: ReadOnBoardingUseCase
) : ViewModel() {
var state by mutableStateOf(SplashState())
init {
viewModelScope.launch {
readOnBoardingUseCase().collect { completed ->
state = if (completed) {
state.copy(graphs = Graph.HOME, keepSplashOpened = false)
} else {
state.copy(graphs = Graph.WELCOME, keepSplashOpened = false)
}
}
}
}
}
SplashState
data class SplashState(
val graphs: String? = null,
var keepSplashOpened: Boolean = true
)
有什么个人建议吗?我刚开始在这里发帖。
上面的代码是一个例子,这就是我到目前为止所做的。
问题就在这里
var keepSplashOpened = viewModel.state.keepSplashOpened
installSplashScreen().setKeepOnScreenCondition {
keepSplashOpened
}
keepSplashOpened
的值只被捕获一次,不会更新。要修复它,请将代码更改为
installSplashScreen().setKeepOnScreenCondition {
viewModel.state.keepSplashOpened
}