屏幕1:显示带有添加按钮的项目列表。屏幕2:向列表中添加新项目的表单。
屏幕2>gt;屏幕1-在屏幕2中调用navigator.pop((时,如何在屏幕1中调用方法/setState(更新列表(?有人能帮我吗?
我不想再次重新启动屏幕。我只需要在弹出上一个屏幕后运行一个方法来更新我的列表?
从屏幕1导航到屏幕2时,使用push
方法。push
方法返回一个Future
对象。从导航堆栈中弹出Screen 2后,可以使用Future
的then
方法执行代码。
Navigator.of(context)
.push(MaterialPageRoute(
builder: (context) => Screen2(),
))
.then((value) {
// you can do what you need here
// setState etc.
});
您可以使用Provider或BLoc,也可以在推送页面时等待结果
你可以这样做:
// 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
Navigator.pop
有第二个参数,称为result。然后,您可以将所需的值返回到将读取该值的第一页,作为Navigator.push
的返回值