小编Fra*_*rax的帖子

Jetpack Compose + Navigation - 使用 BottomNavBar 进行嵌套导航

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

7
推荐指数
1
解决办法
8016
查看次数

Jetpack Compose + 导航 - navigate() 上的无限循环

我正在使用 Jetpack Compose + Navigation(单一活动,无片段),并且我正在尝试执行如下导航路线:

SplashScreen---(延迟)---> AuthScreen---(如果成功)-->MainScreen

navigate()不幸的是,当我执行登录时,可组合项中的函数LoginScreen会导致无限循环。我不明白我是否正在触发重组或会发生什么。不幸的是,很难共享所有代码,但请记住:

  • 这个问题似乎与LoginScreenMainScreen组合项无关(您可以假设它们只是一个简单的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

6
推荐指数
1
解决办法
2907
查看次数