如何在flutter中调用函数来更新弹屏后的值?

问题描述 投票:0回答:3

画面1:显示带有添加按钮的项目列表 画面2:在列表中添加新的项目的表单 画面2 》 画面1在画面2中调用navigator.pop()时,如何调用methodsetstate(更新列表)?

屏幕2 》屏幕1在屏幕2中调用navigator.pop()时,如何调用屏幕1中的methodsetstate(更新列表)?谁能帮帮我?

我不想再重新启动屏幕,我只需要在弹出上一个屏幕后运行方法更新我的列表就可以了。

flutter dart mobile flutter-layout
3个回答
2
投票

从屏幕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.
  });

1
投票

你可以使用 供应商BLoc 或者您可以在推送页面时等待结果。


0
投票

Navigator.pop 的第二个参数叫result.然后你可以将你需要的值返回给第一个页面,该页面将以result的返回值的形式读取它。Navigator.push


0
投票

你可以这样做。

// 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。

© www.soinside.com 2019 - 2024. All rights reserved.