我有一个 flutter 应用程序,它在应用程序的不同屏幕中发出许多不同的 http 请求。现在,我想实现一些常规错误处理,例如,每当没有连接时,我想显示一个 SnackBar,无论我当前在应用程序中的哪个位置。我设法编写了一种方法,每次我的请求出现异常时都会调用该方法。现在,我想在这个方法中显示 SnackBar。但我无权访问此方法中的 BuildContext,也无法将其作为参数传递给该方法。
那么,有没有办法在没有上下文的情况下显示 SnackBar 呢?例如,获取当前活动屏幕的上下文,然后使用它来显示 SnackBar 的方法?
Mig*_*ivo 15
建议使用 Kaival 指出的包并不是正确的方法,因为除了依赖第 3 方包以及有时不需要时使用这些包过度设计您的应用程序之外,您不会学到解决问题的正确解决方案。
在没有上下文的情况下使用 aSnackBar实际上通过 a 非常简单key。GlobalKey<ScaffoldState>您可以在任意位置创建并将其分配到Scaffold要显示SnackBar.
GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
Widget build(BuildContext context) {
return Scaffold(key: _scaffoldKey);
}
Run Code Online (Sandbox Code Playgroud)
然后您可以在任何您想要的地方检查其状态以启动SnackBar:
void foo() {
if(_scaffoldKey.currentState != null) {
_scaffoldKey.currentState.showSnackBar();
}
}
Run Code Online (Sandbox Code Playgroud)
您只需要在显示之前确保状态已安装(即Scaffold您想要的状态可用)。
只要确保您正在使用新的ScaffoldMessengerAPI,您可能需要考虑将其添加到您的 root MaterialAppa中,以便您可以在任何地方ScaffoldMessengerState使用它。
final GlobalKey<ScaffoldMessengerState> rootScaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();
MaterialApp(
scaffoldMessengerKey: rootScaffoldMessengerKey,
home: ...
)
Run Code Online (Sandbox Code Playgroud)
并相应地调用它
rootScaffoldMessengerKey.currentState.showSnackBar();
Run Code Online (Sandbox Code Playgroud)
请参阅文档以获取更多信息。
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |