发生这种情况是因为BuildContext
使用的人没有Scaffold
祖先,因此将无法找到它来呈现,SnackBar
因为Scaffold
要显示它。
根据方法文档:
当实际上在同一构建函数中创建了脚手架时,该构建函数的context参数不能用于找到该脚手架(因为它在返回的小部件“上方”)。在这种情况下,可以使用以下带有Builder的技术来为BuildContext提供“在”脚手架下方的新作用域:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Demo')
),
body: Builder(
// Create an inner BuildContext so that the onPressed methods
// can refer to the Scaffold with Scaffold.of().
builder: (BuildContext context) {
return Center(
child: RaisedButton(
child: Text('SHOW A SNACKBAR'),
onPressed: () {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Hello!'),
));
},
),
);
},
),
);
}
与使用@ ,@ Epizon答案已经提到过的相比,将其包装FloatingActionButton
在一个Builder
小部件中将使它变得更加优雅GlobalKey
。