2

假设这种情况:page1Navigator.push到 page2。page2 上的用户单击后退按钮,因此 page2 弹出并且 page1 重新获得视图。如何在第 1 页捕捉到此事件?

4

4 回答 4

4

您可以通过从 Navigator.pop 传递参数来进行检查...

从第二个屏幕:-

 Navigator.pop(context, 'updateList'),

并在第一个屏幕上像这样检查并通过您想要的条件:-

FloatingActionButton(
                  onPressed: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (BuildContext context) =>
                            new ManageAssignments(),
                      ),
                    ).then((val) {
                      if (val == 'updateList') getAssignementList();
                    });
                  },
                  backgroundColor: Theme.of(context).primaryColor,
                  child: Icon(Icons.add),
                )

希望它对你有用:-)

于 2019-11-14T06:40:44.610 回答
3

所以当 Navigator.push() 发生时,它会返回一个 Future。在 Navigator.pop() 上,未来已经解决。您可以像这样从 Navigator.pop 返回值 Navigator.pop(context, "MyResult"); 该结果将像这样被捕获 - 最终结果 = Navigator.push()。您可以在调用 Navigator.push() 的小部件中使用结果。

于 2019-11-14T06:34:42.853 回答
1

在弹出屏幕中使用WillPopScope小部件,然后在弹出屏幕时获得通知使用onWillPop功能。

像这样:

return WillPopScope(
      child: Scaffold(
          body: new Container(), // your body content
      onWillPop: (){
      //Screen is poped.
    },
    );
    
)
于 2019-11-14T06:40:11.503 回答
0

您可以使用提供程序包并在推回时发送通知并通知侦听器并更新您想要的内容。

于 2021-12-31T19:33:19.057 回答