为啥有时小吃店会失败

Posted

技术标签:

【中文标题】为啥有时小吃店会失败【英文标题】:Why sometimes snackbar is failing为什么有时小吃店会失败 【发布时间】:2021-06-30 03:11:43 【问题描述】:

请帮助解释为什么有时我的 SnackBar 会显示错误。我不明白问题会在什么情况下出现。我只想指出,即使它显示错误,在应用程序本身中,它也可以正常工作。

这是我的代码:

void showFailedSnackBar(String s) 
    SnackBar snackBar = SnackBar(
      content: Text(s),
      duration: Duration(seconds: 3),
      backgroundColor: Theme.of(context).primaryColor,
    );

    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  

这是错误:

E/flutter ( 7879): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: This widget has been unmounted, so the State no longer has a context (and should be considered defunct).
E/flutter ( 7879): Consider canceling any active work during "dispose" or using the "mounted" getter to determine if the State is still active.

【问题讨论】:

【参考方案1】:

尝试检查小部件是否仍然挂载在三个中:

void showFailedSnackBar(String s) 
    if (mounted) 
    SnackBar snackBar = SnackBar(
      content: Text(s),
      duration: Duration(seconds: 3),
      backgroundColor: Theme.of(context).primaryColor,
    );

    ScaffoldMessenger.of(context).showSnackBar(snackBar);
    

  

【讨论】:

【参考方案2】:

在你的函数 showSnackbar 中,除了 String 之外,你还可以传递一个 BuildContext 上下文变量,这样你就知道你传递了哪个上下文,例如

    SnackBar snackBar = SnackBar(
      content: Text(s),
      duration: Duration(seconds: 3),
      backgroundColor: Theme.of(context).primaryColor,
    );

    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  

您可以保存您确定存在于提供程序中的脚手架的上下文,以便将其传递到您需要的地方。

【讨论】:

以上是关于为啥有时小吃店会失败的主要内容,如果未能解决你的问题,请参考以下文章

为啥`git stash -p`有时会失败?

为啥我的下载有时会使用 flutter_downloader 失败?

为啥 MediaElement 有时会默默地失败,我该如何纠正它?

为啥在方法中使用 require_once 有时会失败?

微信小程序登录获取openid有时候为啥第一次会失败,第二次才成功?

为啥 PasteSpecial 方法有时会抛出错误 1004?