gpt4 book ai didi

Flutter 在没有上下文的情况下显示 SnackBar

转载 作者:行者123 更新时间:2023-12-04 12:21:40 26 4
gpt4 key购买 nike

我有一个 flutter 应用程序,它在应用程序的不同屏幕上发出许多不同的 http 请求。现在,我想实现一些通用的错误处理,例如,每当没有连接时,我都想显示一个 SnackBar,无论我目前在应用程序中的哪个位置。我设法编写了一个方法,每次在我的一个请求中出现异常时都会调用该方法。现在,我想在此方法中显示 SnackBar。但是我无法访问此方法中的 BuildContext,也无法将其作为参数传递给该方法。
那么,有没有办法在没有上下文的情况下显示 SnackBar?例如,获取当前事件屏幕的上下文,然后使用它来显示 SnackBar 的方法?

最佳答案

建议使用 Kaival 所指出的软件包并不是正确的方法,因为除了依赖 3rd 方软件包之外,您不会为您的问题学习正确的解决方案,并且在有时不需要时也会使用那些过度设计您的应用程序。
涂用SnackBar没有上下文,它实际上非常简单,通过 key .您可以创建一个 GlobalKey<ScaffoldState>无论您想要什么,并将其分配给 Scaffold您想在何处显示 SnackBar .

GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

Widget build(BuildContext context) {
return Scaffold(key: _scaffoldKey);
}
然后在任何你想要的地方,你可以检查它的状态以启动 SnackBar像这样:
void foo() {
if(_scaffoldKey.currentState != null) {
_scaffoldKey.currentState.showSnackBar();
}
}
您只需要确保状态已安装(即,您想要的 Scaffold 在显示之前可用。
只要确保您使用的是新的 ScaffoldMessenger您可能需要考虑将其添加到您的根 API MaterialApp ScaffoldMessengerState所以你可以在任何地方使用它。
final GlobalKey<ScaffoldMessengerState> rootScaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();
MaterialApp(
scaffoldMessengerKey: rootScaffoldMessengerKey,
home: ...
)
并相应地调用它
rootScaffoldMessengerKey.currentState.showSnackBar();
引用 docs了解更多信息。

关于Flutter 在没有上下文的情况下显示 SnackBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68846785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com