Flutter showSnackBar调用为null

时间:2019-01-06 16:18:07

标签: flutter

我正尝试在选项卡式flutter应用程序中显示小吃店,如下所示:

  var scaffoldKey = new GlobalKey<ScaffoldState>();
    scaffoldKey.currentState
      .showSnackBar(new SnackBar(
        content: new Text("This is a message")
      );
  });

但是我得到了错误:

NoSuchMethodError: The method 'showSnackBar' was called on null.

在main.dart文件中,我按如下所示初始化应用程序:

runApp(new MaterialApp(...));

然后在home.dart中调用了快餐栏,它具有选项卡式界面:

小部件构建(BuildContext上下文)=>新的脚手架(...);

因此,我对于在哪个支架上调用快餐栏感到困惑,如何以及为什么scaffoldKey.currentState为null。

3 个答案:

答案 0 :(得分:3)

如果您位于没有直接return Scaffold(...)小部件的小部件中,则可以执行以下操作:

Scaffold.of(context).showSnackBar(
 SnackBar(content: Text("Hello from snackbar",
 textAlign: TextAlign.center, style: TextStyle(fontSize: 14.0, fontWeight: 
 FontWeight.bold),), duration: Duration(seconds: 3), backgroundColor: Colors.blue,)
);

无需创建额外的Scaffold小部件,因为showSnackBar()方法需要一个,即可重复使用。

答案 1 :(得分:2)

您还需要将Key传递给Scaffold小部件。

然后您可以拨打-scaffoldKey.currentState.showSnackBar

@override
  Widget build(BuildContext context) {
    return Scaffold(
      key: scaffoldKey,
      .....

答案 2 :(得分:0)

     final GlobalKey<ScaffoldState> _scaffoldstate= new GlobalKey<ScaffoldState>();
 void _showbar(){
   _scaffoldstate.currentState.showSnackBar(new SnackBar(content: new Text('Hello world')));
 }

如果你在这里并且编译器抛出这个错误

无法无条件调用“showSnackBar”方法,因为接收器可以为“null”。

只需在 currentState 前面添加 !

_scaffoldstate.currentState!.showSnackBar(new SnackBar(content: new Text('Hello world')));