JetPack中应用程序UI状态的全局ViewModel组成
例如,我试图更改 appBar 的标题或 BottomNavBar 是否应显示在不同的可组合项中。由于我不想将该 viewModel 传递给每个可组合项,因此我创建了一个名为 AppViewModel 的 viewModel 并使用 Hilt 注入它来更改这些值,提到的 viewModel 如下所示:
@HiltViewModel
class AppViewModel @Inject constructor(): ViewModel() {
var showBottomNavBar = mutableStateOf(true)
}
在我的主要活动
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val appViewModel = hiltViewModel<AppViewModel>()
val showBottomNavbar by remember {appViewModel.showBottomNavBar}
AppTheme {
val navController = rememberNavController()
Scaffold(
bottomBar = {
if (showBottomNavbar)
BottomNavigation1(navController = navController)
}
) {
Box(Modifier.padding(it)) {
NavigationGraph(navController = navController)
}
}
}
}
}
}
和我的目标可组合项之一中就像下面的一样如果我更改 showBottomNavbar
它不会改变任何内容。
@Composable
fun Product(
navController: NavController,
appViewModel: AppViewModel = hiltViewModel()
) {
LaunchedEffect(Unit) {
appViewModel.showBottomNavBar.value = false
}
}
我做错了什么以及如何实现我想要的目标? 提前致谢。
I'm trying to for example change the title of the appBar or whether the bottomNavBar should be shown in different composables. Since I don't want to pass that viewModel to every composable, I've created a viewModel called AppViewModel and inject it with Hilt to change these values, The mentioned viewModel is like this:
@HiltViewModel
class AppViewModel @Inject constructor(): ViewModel() {
var showBottomNavBar = mutableStateOf(true)
}
In my main activity
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val appViewModel = hiltViewModel<AppViewModel>()
val showBottomNavbar by remember {appViewModel.showBottomNavBar}
AppTheme {
val navController = rememberNavController()
Scaffold(
bottomBar = {
if (showBottomNavbar)
BottomNavigation1(navController = navController)
}
) {
Box(Modifier.padding(it)) {
NavigationGraph(navController = navController)
}
}
}
}
}
}
And in one of my destination composables like the one below If I change the showBottomNavbar
it doesn't change anything.
@Composable
fun Product(
navController: NavController,
appViewModel: AppViewModel = hiltViewModel()
) {
LaunchedEffect(Unit) {
appViewModel.showBottomNavBar.value = false
}
}
What am I doing wrong and how can I achieve the what I'm looking for?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论