同一个 NavController
被里外两层 NavHost
设置图,导致系统在没来得及初始化好 ViewModelStore
就被二次 setGraph,引发异常。
分别记住两个 NavController
,别拿同一个 controller 用两次 NavHost
。
改动思路
- 去掉你现在
AuthNavHost
参数里的NavHostController
,改为内部自己val authNavController = rememberNavController()
。 - 在
RootNavHost
中,给"auth"
这个 composable 调用AuthNavHost(...)
时,不再传入NavHostController
,只传一个登录成功的回调即可。
这样外层的 navController
(用来跳 “auth” -> “main”)和内层的 authNavController
(用来跳登录页、注册页)就互相独立。