在Flutter导航后显示小吃吧

Deb*_*rah 10 material dart flutter

在执行操作(例如,"保存")后,用户将返回到应用程序中的另一个页面.

我想在新页面上显示一个快餐栏以确认操作,但不希望它显示用户是否在没有操作的情况下导航.因此,例如,如果用户保存"东西",应用程序将它们发送到"事物"主页并显示"已保存"的零食栏,但如果他们以其他方式转到"事物"主页,我​​不希望"保存了"小吃店".

这是我保存的面板上的代码,但目标页面没有显示小吃栏 - 无论我在哪里放置小吃店(在导航之前或之后),它都不会执行小吃店.

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!'),
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

Sto*_*eev 9

如果你像这样为屏幕Scaffold创建键(把这个对象放在屏幕状态类中)怎么样:

final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
Run Code Online (Sandbox Code Playgroud)

然后将此变量设置为Scaffold键,如下所示:

return new Scaffold(
  key: scaffoldKey,
  appBar: new AppBar(
    .......,
  ),
Run Code Online (Sandbox Code Playgroud)

并在最后显示SnackBar只是在屏幕状态类的内部使用此代码:

scaffoldKey.currentState
    .showSnackBar(new SnackBar(content: new Text("Hello")));
Run Code Online (Sandbox Code Playgroud)

或者你可以用这样的方法包装最新的代码:

void showInSnackBar(String value) {
scaffoldKey.currentState
    .showSnackBar(new SnackBar(content: new Text(value)));}
Run Code Online (Sandbox Code Playgroud)

然后只需调用此方法并传递小吃栏消息.

如果您想在下一个屏幕上显示小吃店消息,在离开初始上下文后,只需在下一个屏幕上调用小吃店方法,而不是在第一个屏幕上.

希望这会有所帮助


小智 7

您必须将结果返回到上一页,该结果将代表页面上显示的操作。

在第一页中,当您导航到该页面时,请更改一些内容。

bool result=await Navigator.of(context).push(/*Wherever you want*/);
Run Code Online (Sandbox Code Playgroud)

然后在第二页中,当您返回上一页时,将一些结果发送到第一页。

Navigator.of(context).pop(true);
Run Code Online (Sandbox Code Playgroud)

如果工作不成功您可以返回false

您可以返回任何类型的对象作为结果

然后在第一页您可以检查result并显示snackBar相应的

bool result=await Navigator.of(context).push(/*Wherever you want*/);
if(result!=null && result==true){
    //Show SnackBar
}else{
    //Some other action if your work is not done
}
Run Code Online (Sandbox Code Playgroud)