[英]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
导航、打开dialogs
、 snackbars
或bottomsheets
。 然而, 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.