弹出屏幕后如何调用函数更新值?

时间:2020-05-06 19:38:09

标签: flutter dart mobile flutter-layout

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

屏幕2》屏幕1在屏幕2中调用navigator.pop()时,如何在屏幕1中调用方法/设置状态(以更新列表)? 谁能帮我吗?

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

4 个答案:

答案 0 :(得分:3)

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

Future

答案 1 :(得分:1)

您可以使用 Provider Bloc ,也可以在按下页面时等待结果

答案 2 :(得分:0)

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

的返回值读取它

答案 3 :(得分: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.com/flutter-community/flutter-push-pop-push-1bb718b13c31