我的应用程序使用OpenID对用户进行身份验证。
第一个页面更像是一个闪屏,如果需要的话,用户可以进入一个网页进行授权,或者只是对令牌进行后台刷新,然后导航到主屏幕。
我不确定如何在不单击按钮的情况下启动身份验证流程
@Composable
fun LoginScreen(viewModel: LoginViewModel) {
val ctx = LocalContext.current
AppTheme {
Screen()
}
viewModel.performLogin(ctx)
}
执行上述操作是可行的,但当应用程序导航到主屏幕时,它会再次被调用。
fun loginComplete(navController: NavHostController) {
navController.navigate("main")
}
@Composable
fun MyApp(viewModel: LoginViewModel) {
val navController = rememberNavController()
viewModel.setOnLoginCompete(navController, ::loginComplete)
NavHost(navController, startDestination = "login") {
composable(route = "login") {
LoginScreen(viewModel)
}
composable(route = "main") {
MainScreen()
}
}
}
我不认为我应该像在Composable函数中那样调用performLogin函数,但我看不到其他方法。我错过了什么?
2条答案
按热度按时间nnvyjq4y1#
您可以将您的流程与生命周期回调绑定。您可以创建可组合的实用程序来处理生命周期事件。
如果您希望在应用进入前台时启动日志流,请按以下方式使用:
我实际上使用this question and its answer作为源代码
vom3gejh2#
您可以使用的另一种方法如下
让我们一步一步来:)
第一步:ViewModel必须实现DefaultLifecycleObserver接口
通过这种方式,您可以访问以下方法:
第二步:在您的Composable中,调用我发送给附件的方法,如下所示。
创建如下扩展函数:
在可组合函数中调用它,如下所示
口渴步骤:在ViewModel中实现您的逻辑,如果您要转到另一个页面,请通知Composable by Event