我正尝试在选项卡式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。
答案 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')));