在 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 后,您可以使用 Future
的 then
方法执行您的代码。
Navigator.of(context)
.push(MaterialPageRoute(
builder: (context) => Screen2(),
))
.then((value)
// you can do what you need here
// setState etc.
);
【讨论】:
【参考方案2】:您可以使用Provider或BLoc,也可以在推送页面时等待结果
【讨论】:
这是完成此任务的另一种选择。非常感谢。【参考方案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 中弹出屏幕后如何调用函数来更新值?的主要内容,如果未能解决你的问题,请参考以下文章