我正在使用纯粹的 Jetpack Compose 构建一个 Android 应用程序。我的整个应用程序都包裹在一个脚手架下,并且我的应用程序中的每个“屏幕”(它们是可组合的)都有一个 ViewModel。因此,我的脚手架中有一些条件语句来根据路线确定浮动操作按钮 (FAB)。但是,其中一个 FAB 需要访问 ViewModel 中的函数,该函数仅在我导航到包含该可组合的路由时创建,并且我不知道让 FAB 访问该视图模型函数的最佳方式.
以以下示例(基于我的代码)为例,并注意路线“route3”的 FAB。
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApp()
}
}
@Composable
fun MyApp() {
val navController = rememberNavController()
val backstackEntry = navController.currentBackStackEntryAsState()
val scaffoldState = rememberScaffoldState()
Surface(color = MaterialTheme.colors.background) {
Scaffold(
topBar = { ... },
bottomBar = { ... },
floatingActionButton = {
when (backstackEntry.value?.destination?.route) {
"route2" -> FAB2(navController)
"route3" -> FAB3(navController) // Needs to access function from viewModel3
}
},
scaffoldState = scaffoldState,
) {
MyNavHost(navController, scaffoldState)
}
}
}
@Composable
fun MyNavHost(navController: NavHostController, scaffoldState: ScaffoldState) {
NavHost(
navController = navController,
startDestination = "route1"
) {
composable("route1") { Destination1() }
composable("route2") { Destination2() }
composable("route3") { Destination3() }
}
}
@Composable
fun Destination1() { ...}
@Composable
fun Destination2() { ... }
@Composable
fun Destination3() {
val viewModel3: CustomViewModel = hiltViewModel()
Screen3(viewModel3)
}
}
所以我的主要问题是,如果FAB3
变量需要从 访问函数viewModel3
,我将如何去做?