【问题标题】:Trying to display a Flutter snackbar throws an exception error尝试显示 Flutter 快餐栏会引发异常错误
【发布时间】:2019-10-25 06:34:38
【问题描述】:

请在将其标记为重复之前看看,我一直在尝试this thread,但我无法让它工作。 我正在尝试让我的学习应用程序显示一个小吃栏,是的,我运行了谷歌食谱示例并且它有效,但我试图挑战我自己做其他事情,基本上它是什么,只是一个带有两个按钮的脚手架增加和减少,当索引为零时,我想显示一个索引为零的小吃店,不能减少更多。所以我得到了这个按钮,onPressed 方法调用了传递上下文参数的 _onTapPrevious 方法,但我不确定这是传递上下文的正确方法。

new RaisedButton( 
  padding: const EdgeInsets.all(8.0),
  textColor: Colors.white,
  color: Colors.redAccent,
  onPressed: () => _onTapPrevious(context),
  child: new Text("Previous"),
),

这是我创建了一个snackbar的_onTapPrevious方法,它还检查了widget index是否>大于0,如果是,它可以减少索引,当它达到0时,它应该显示snackbar。

_onTapPrevious(BuildContext context) {
    final snackBar = SnackBar(content: Text("Index 0, can't decrease more."));
    setState(() {
      if (widget.index > 0) {
        widget.index--;
      } else {
       Scaffold.of(context).showSnackBar(snackBar);
     }
    });
  }

我得到的错误:

flutter: Another exception was thrown: Scaffold.of() called with a context that does not contain a Scaffold.

【问题讨论】:

    标签: flutter


    【解决方案1】:

    尝试添加

    final _scaffoldKey = GlobalKey<ScaffoldState>();
    

    到你的班级,然后在 Scaffold:

     key: _scaffoldKey,
    

    最后:

    _scaffoldKey.currentState.showSnackBar(snackBar);
    

    希望有帮助!

    【讨论】:

    • 我就是这样做的,就在你写这个解决方案之前,就在我删除这个问题的时候,它收到了你写了一个答案的通知,但无论如何谢谢你,我是保留它并标记为解决方案。 :)
    猜你喜欢
    • 2018-06-03
    • 2019-04-30
    • 2014-02-08
    • 2016-07-04
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 2020-11-04
    相关资源
    最近更新 更多