在执行操作(例如,“保存”)后,用户将返回到应用程序中的另一个页面。
我想在新页面上显示一个快餐栏以确认操作,但不希望它显示用户是否在没有操作的情况下导航。因此,例如,如果用户保存“东西”,应用程序将它们发送到“事物”主页并显示“已保存”的零食栏,但如果他们以其他方式转到“事物”主页,我不希望“保存了“小吃店”。
这是我保存的面板上的代码,但目标页面没有显示小吃栏 - 无论我在哪里放置小吃店(在导航之前或之后),它都不会执行小吃店。
Future<Null> saveThatThing() async {
thing.save();
thing = new Thing();
Navigator.of(context).push(getSavedThingRoute());
Scaffold.of(context).showSnackBar(
new SnackBar(
content: new Text('You saved the thing!'),
),
);
}
做这个的最好方式是什么?
如果你像这样为屏幕Scaffold创建键(把这个对象放在屏幕状态类中)怎么样:
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
然后将此变量设置为Scaffold键,如下所示:
return new Scaffold(
key: scaffoldKey,
appBar: new AppBar(
.......,
),
并在最后显示SnackBar只是在屏幕状态类的内部使用此代码:
scaffoldKey.currentState
.showSnackBar(new SnackBar(content: new Text("Hello")));
或者你可以用这样的方法包装最新的代码:
void showInSnackBar(String value) {
scaffoldKey.currentState
.showSnackBar(new SnackBar(content: new Text(value)));}
然后只需调用此方法并传递小吃栏消息。
如果您想在下一个屏幕上显示小吃店消息,在离开初始上下文后,只需在下一个屏幕上调用小吃店方法,而不是在第一个屏幕上。
希望这会有所帮助
由于显示SackBar
需要活动的Scaffold
,您需要将消息传递给新的路由页面,如getSavedThingRoute(message: 'You saved the thing!')
,新页面负责显示消息。
通常我碰巧使用Navigation.pop({'message': 'You saved the thing!', 'error': false})
传递消息。