如何在关闭屏幕时关闭打开的 SnackBar?
Posted
技术标签:
【中文标题】如何在关闭屏幕时关闭打开的 SnackBar?【英文标题】:How to close opened SnackBar on closing of screen? 【发布时间】:2019-11-20 05:31:57 【问题描述】:我有一个BottomNavigationBar
用于管理各种屏幕。 SnackBar
在一个屏幕上打开,当我转到另一个屏幕时,Snackbar
仍然打开。当我切换到另一个屏幕时,我需要立即关闭它。我知道必须在dispose
方法中调用removeCurrentSnackBar()
方法,但是当我尝试这样做时,我得到了错误:Looking up a deactivated widget's ancestor is unsafe
。看起来context
已经被释放了。
所以问题就在标题中。
【问题讨论】:
你确定在super.dispose()
之前调用.removeCurrentSnackBar()
吗?
是的。我将这行代码放在 super.dispose 之前。有些消息还说state is not stable in dispose method
。我为 Scaffold 使用了全局键,但 currentState
在 dispose
方法中的值已经为空。
@BambinoUA 你找到解决方案了吗?我现在面临同样的问题
@SardobekR,看看我的回答。
【参考方案1】:
解决方法很简单:
ScaffoldMessengerState snackbar;
void dispose()
snackbar.removeCurrentSnackbar();
super.dispose();
void didChangeDependencies(BuildContext context)
super.didChangeDependencies(context);
snackbar = ScaffoldMessenger.of(context);
Widget build(BuildContext context)
...
snackbar.showSnackbar(...);
...
【讨论】:
以上是关于如何在关闭屏幕时关闭打开的 SnackBar?的主要内容,如果未能解决你的问题,请参考以下文章