繁体   English   中英

在 MainActivity(根 @Composable)中显示来自任何子可组合(Jetpack Compose)的 Snackbar

[英]Show Snackbar in MainActivity (root @Composable) from any child composable (Jetpack Compose)

我想在任何子@Composable的 MainActivity (根可组合)中显示一个小吃栏。

我的第一个想法是使用CompositionLocalProvider提供SnackbarHostState但这似乎不起作用(或者我做错了)。


    val mainSnackBarHostState = remember { SnackbarHostState() }
    val SnackBarHostStateProvider = compositionLocalOf<SnackbarHostState> { mainSnackBarHostState }

    CompositionLocalProvider(SnackBarHostStateProvider provides mainSnackBarHostState) {
        MainScreenNavigationConfigurations(navController)
    }

我的孩子@Composable似乎无法找到/访问SnackBarHostStateProvider

有什么想法吗?

我想说,最好的方法是将小吃店的 state (可见/不可见)存储在您的视图模型中,然后让小吃店从那里读取。 无论何时何地,您想要切换 state,只需更改视图模型中的值,就可以了

如果您不熟悉 viewmodel,这是构建应用程序的推荐和标准方法,请记住,在 Compose 中,推荐的方法是将 state 存储在 viewmodel 中,而不是作为常规变量,而是作为状态持有者。

例如,在您的用例中,您可以将小吃店的可见性状态存储为 mutableStateOf(false),因为初始可见性值为 false。

这假设您可以从整个应用程序访问您的视图模型,开发人员通常会这样做,无论他们需要更新 state,所以,祝您好运

可能您需要将变量SnackBarHostStateProvider声明为包级变量,以便能够从提供程序和子项访问它。

另请参阅此相关答案: https://stackoverflow.com/a/69905470/293878

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM