我正在尝试使用 Jetpack Compose + Jetpack Navigation 实现以下屏幕流程:
实际上,我可以编写两个单打案例:
我无法编写整个问题的代码。事实上,我对 NavHost 的管理有疑问。在第一种情况(SplashScreen -> HomeScreen)中,我需要在高范围内调用 NavHost:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyAppTheme {
//init the Navigation Controller for screen navigation
val navController = rememberNavController()
//setup the Navigation Graph
SetupNavGraph(navController)
Run Code Online (Sandbox Code Playgroud)
而在第二种情况下,我需要在可组合项innerPadding的范围内调用它Scaffold:
fun MainScreen(navController: NavHostController) {
Scaffold(
bottomBar = {
BottomNavBar(navController)
}
) { //innerPadding scope
//setup the Navigation Graph
SetupNavGraph(navController)
}
}
Run Code Online (Sandbox Code Playgroud)
请假设该SetupNavGraph()函数按预期工作(调用 …
android android-bottomnav android-jetpack-navigation android-jetpack-compose
我正在使用 Jetpack Compose + Navigation(单一活动,无片段),并且我正在尝试执行如下导航路线:
SplashScreen---(延迟)---> AuthScreen---(如果成功)-->MainScreen
navigate()不幸的是,当我执行登录时,可组合项中的函数LoginScreen会导致无限循环。我不明白我是否正在触发重组或会发生什么。不幸的是,很难共享所有代码,但请记住:
LoginScreen可MainScreen组合项无关(您可以假设它们只是一个简单的Text可组合项)NavigationGraph。事实上,如果我只是进行SplashScreen-->MainScreen转换,就不会出现问题navController.navigate("main")则不再有循环;这是AuthScreen出现问题的代码。
@Composable
fun AuthScreen(navController: NavController) {
val signInRequestCode = 1
val context = LocalContext.current
val mSignInViewModel: SignInGoogleViewModel = viewModel(
factory = SignInGoogleViewModelFactory(context.applicationContext as Application)
)
val state = mSignInViewModel.googleUser.observeAsState()
val user = state.value
val isError = rememberSaveable { mutableStateOf(false) }
val authResultLauncher =
rememberLauncherForActivityResult(contract …Run Code Online (Sandbox Code Playgroud) infinite-loop android-jetpack-navigation android-jetpack-compose
android ×1