画面1:显示带有添加按钮的项目列表 画面2:在列表中添加新的项目的表单 画面2 》 画面1在画面2中调用navigator.pop()时,如何调用methodsetstate(更新列表)?
屏幕2 》屏幕1在屏幕2中调用navigator.pop()时,如何调用屏幕1中的methodsetstate(更新列表)?谁能帮帮我?
我不想再重新启动屏幕,我只需要在弹出上一个屏幕后运行方法更新我的列表就可以了。
从屏幕1导航到屏幕2时,在屏幕2中使用的是 push
方法。该 push
方法返回一个 Future
对象,你可以使用 then
方式 Future
从导航栈中弹出屏幕2后执行你的代码。
Navigator.of(context)
.push(MaterialPageRoute(
builder: (context) => Screen2(),
))
.then((value) {
// you can do what you need here
// setState etc.
});
你可以使用 供应商 或 BLoc 或者您可以在推送页面时等待结果。
Navigator.pop
的第二个参数叫result.然后你可以将你需要的值返回给第一个页面,该页面将以result的返回值的形式读取它。Navigator.push
你可以这样做。
// 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.comflutter-communityflutter-push-push-1bb718b13c31。