从脚手架内部显示小吃栏在浮动操作按钮上按下回调



我正在尝试调用

Scaffold.of(context).showSnackBar(SnackBar(
content: Text("Snack text"),
));

脚手架floatingActionButtononPressed内。

我收到此错误

I/flutter (18613): Scaffold.of() called with a context that does not contain a Scaffold.
I/flutter (18613): No Scaffold ancestor could be found starting from the context that was passed to 
....

当你在身体内部调用Scaffold.of(context)时,它指向了一个解决方案。

https://docs.flutter.io/flutter/material/Scaffold/of.html

但是,如果您在内部调用它,则相同的解决方案不起作用FloatingActionButton

更新:第二个解决方案比这个解决方案更好。

您应该将浮动的ActionButton小部件放在Builder Widget中。 以下代码应该有效:

@override
Widget build(BuildContext context) {
return new Scaffold(
floatingActionButton: new Builder(builder: (BuildContext context) {
return new FloatingActionButton(onPressed: () {
Scaffold
.of(context)
.showSnackBar(new SnackBar(content: new Text('Hello!')));
});
}),
body: new Container(
padding: new EdgeInsets.all(32.0),
child: new Column(
children: <Widget>[
new MySwitch(
value: _switchValue,
onChanged: (bool value) {
if (value != _switchValue) {
setState(() {
_switchValue = value;
});
}
},
)
],
),
),
);

添加一个基架状态的全局键并使用它 显示小吃店如下,

GlobalKey<ScaffoldState> scaffoldState;
Scaffold {
key: scaffoldState,
....

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

这更简单。试过了。将浮动操作按钮创建为单独的无状态控件从基架调用此无状态小部件。

class Abc extends StatelessWidget
{
Widget build(BuildContext context)
{
return Scaffold(
appBar:AppBar(title:Text("Long List View")),
body:SomeOtherWidget(),
floatingActionButton:MyFAB()  
);
}
}
class MyFAB extends StatelessWidget
{
Widget build(BuildContext context)
{
return FloatingActionButton(
onPressed:(){
showSnackBarHandler(context);
},
child:Icon(Icons.add),
tooltip:"Press to Add More"
);
}
}
void showSnackBarHandler(BuildContext context){
var snackBar = SnackBar(
content:Text("Hello")
);
Scaffold.of(context).showSnackBar(snackBar);
}

最新更新