如何在单击单个按钮时激活setState和snackBar



因此,我正在制作一个随机教程应用程序,并有了在更改应用程序状态时使用snackBar的想法。但我总是遇到一个例外:"使用不包含Scaffold的上下文调用Scaffold.of(("。

class _HomeState extends State<Home> {
String _instrument;
var _bal = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: <Widget>[
Expanded(
child: Text("Make Money"),
),
Expanded(
child: Text("Account Ballence : n$$_bal"),
),
Expanded(
child: Center(
child: RaisedButton(
child: Text("Gamble"),
onPressed: _gamble,
)  
)
)
],
),
));
}
void _gamble() {
Random rnd = new Random();
setState(() {
_bal += rnd.nextInt(10000 - 0) - 4000;
});
Scaffold.of(context).showSnackBar(SnackBar(content: Text("Money Updated"),));
}
}

问题似乎在函数_gamble中。有其他方法吗?我尝试使用Builder并返回RaisedButton,但它也是一个例外。

如果scaffold是窗口小部件树中一个级别以上的父窗口小部件,则您的代码可以工作,但如果您想在同一级别使用scaffold,则必须使用ScaffoldKey作为以下代码。

创建脚手架关键点。

var _scaffoldKey = new GlobalKey<ScaffoldState>();

为脚手架指定关键点。

Scaffold(
key: _scaffoldKey,
body: Center(

现在使用ScaffoldKey显示SnackBar。

_scaffoldKey.currentState.showSnackBar(SnackBar(
content: Text("Money Updated"),

最新更新