如何在关闭屏幕时关闭打开的 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 使用了全局键,但 currentStatedispose 方法中的值已经为空。 @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?的主要内容,如果未能解决你的问题,请参考以下文章

当用户执行任何操作时如何关闭 Snackbar?

防止 Snackbar 在操作单击时关闭

Snackbar 在操作点击时不会被关闭

设备屏幕关闭时如何打开手电筒?

屏幕打开/关闭时如何更新 Android 小部件?

如何等待 Snackbar ?我想知道啥时候关门