提问人:grandouassou 提问时间:10/16/2023 更新时间:10/16/2023 访问量:27
在Android上后台加载数据后显示第一个屏幕
Display the first screen once data is loaded in background on Android
问:
我正在使用所有现代 Android 开发堆栈(Compose UI 和 Navigation、ViewModel 等)和 Preferences DataStore 来存储 AuthState(来自 AppAuth)。
我在加载应用程序的初始状态时遇到问题。 我想根据身份验证状态加载登录屏幕或主屏幕。
我对下面的解决方案不太满意。由于 DataStore 交互是异步的,因此在确定第一个屏幕之前会有一小段延迟。 如果我不使用 if 语句“保护”AppScreen 可组合项,它将在用户已通过身份验证后导航到主屏幕之前快速显示登录屏幕。
你有什么建议或更好的方法来实现这一目标吗?
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val viewModel: AppViewModel by viewModels()
setContent {
val authState by viewModel.appState.collectAsState()
// maintain splashscreen while loading initial state
val view = LocalView.current
view.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
return if (authState != AppState.INITIALIZING) {
view.viewTreeObserver.removeOnPreDrawListener(this)
true
} else {
false
}
}
})
MyAppTheme {
if (authState != AppState.INITIALIZING) {
AppScreen(viewModel = viewModel)
}
}
}
}
}
答:
1赞
Vikas
10/16/2023
#1
我遇到了这个问题,只是显示初始屏幕,直到你有条件的工作没有完成,当它完成时显示一个特定的页面
评论
0赞
Ayman Ait
10/16/2023
是的,最好的解决方案是启动画面,因为这就是它们的用途
0赞
Vikas
10/16/2023
如果有用,请接受答案,它也会帮助其他人
评论