繁体   English   中英

如何在 flutter 中显示没有上下文 object 的 Snackbar?

[英]How to show Snackbar without Context object in flutter?

很多时候,当涉及到 UI 代码和业务逻辑时,我们会分离关注点。 这反映在我们在 Flutter 中使用的大多数 state 管理解决方案中。

在许多state管理解决方案中,业务逻辑在视图文件(小部件文件)之外,有些情况下我们希望根据flutter中的逻辑显示snackbar。

但要显示Snackbar ,我们首先需要上下文 object。 我使用 NavigatorState 在没有上下文的情况下进行导航。 但我不知道是否有办法在没有上下文的情况下显示SnackBar

有人可以为此提供解决方案吗?

此外,如果您可以提供一个在内部管理 state 的实用程序方法,并且每当用户想要显示快餐栏时,只需从其代码的逻辑部分调用该实用程序方法,这将非常有帮助。

您绝对可以在没有上下文的情况下显示一条信息,类似于snackbar ,但是,它不是snackbar

如果您使用package Get ,您可以在代码中的任何位置进行无context导航、打开dialogssnackbarsbottomsheets 然而, snackbars尤其存在一些问题。

由于它不检查Scaffold ,因此snackbar直接显示在屏幕底部。 这意味着如果您有一个BottomNavigationBar ,它将被它覆盖或部分覆盖。

这也意味着如果你有一个FloatingActionButton ,它不会像普通的snackbar 那样响应snackbar snackbar

总而言之,使用 Get,您可以在没有context的情况下snackbars ,但您必须在 UI 中做出一些牺牲。

例子

final bottomSnackBar = GetBar(
  isDismissible: false,
  showProgressIndicator: true,
  message: 'Processing...',
);

bottomSnackBar.show();

somethingAsync().then((_) => bottomSnackBar.hide());

您可以将scaffoldMessengerKey指定为MaterialApp的一个属性,然后可以直接使用ScaffoldMessenger而无需BuildContext

我认为您可以采用与navigatorKey相同的方式。

参考: https://api.flutter.dev/flutter/material/MaterialApp/scaffoldMessengerKey.html

暂无
暂无

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

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