在 Flutter 中弹出屏幕后如何调用函数来更新值?

Posted

技术标签:

【中文标题】在 Flutter 中弹出屏幕后如何调用函数来更新值?【英文标题】:How to call a function to update a value after popping a screen in Flutter? 【发布时间】:2020-08-21 22:18:08 【问题描述】:

屏幕 1:显示带有添加按钮的项目列表。 屏幕 2:向列表中添加新项目的表单。

屏幕 2 >> 屏幕 1 - 在屏幕 2 中调用 navigator.pop() 时,如何在屏幕 1 中调用方法/setState(更新列表)? 谁能帮帮我?

我不想再次重新启动屏幕。我只需要在弹出上一个屏幕后运行一个方法来更新我的列表?

【问题讨论】:

【参考方案1】:

当您从屏幕 1 导航到屏幕 2 时,您使用 push 方法。 push 方法返回一个 Future 对象。 从导航堆栈中弹出屏幕 2 后,您可以使用 Futurethen 方法执行您的代码。

Navigator.of(context)
  .push(MaterialPageRoute(
     builder: (context) => Screen2(),
  ))
  .then((value) 
    // you can do what you need here
    // setState etc.
  );

【讨论】:

【参考方案2】:

您可以使用ProviderBLoc,也可以在推送页面时等待结果

【讨论】:

这是完成此任务的另一种选择。非常感谢。【参考方案3】:

Navigator.pop 有第二个参数,称为结果。 然后,您可以将所需的值返回到将其读取为Navigator.push 的返回值的第一页

【讨论】:

【参考方案4】:

你可以这样做:

// this method waits for the pop to be called
var data = await Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => LoginScreen()),
);

debugPrint(data); 

// here the second argument is the data 
Navigator.pop(context, "data");  // popped from LoginScreen().

输出

数据

同样的方法也可以如下进行

   // this method waits for the pop to be called
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => LoginScreen()),
).then((data)
    // then will return value when the loginScreen's pop is called.
    debugPrint(data); 
);

这是一篇很好的文章来研究这个 https://medium.com/flutter-community/flutter-push-pop-push-1bb718b13c31

【讨论】:

以上是关于在 Flutter 中弹出屏幕后如何调用函数来更新值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中弹出没有动画的屏幕

如何在 shiro 中弹出一个屏幕来警告会话超时?

如何在颤动中弹出到特定屏幕

如何在flutter中调用函数后刷新页面?

如何在颤动中从导航器堆栈中弹出最后三个路由

Android中弹出dialog后无法捕捉back键