SplashScreen stuck



我正在使用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
}