从页面B返回时,如何刷新页面A上的小部件?

时间:2019-04-11 12:08:32

标签: dart flutter

我有一个有状态的Page A,其中包含一个小部件,该小部件存在于单独的有状态类中。

该小部件在其initState方法中从sharedPreferences中获取一个数字并显示出来,当我单击该小部件时,它会路由到Page B,Page B包含一个更改sharedPreferences中数字的函数。

当我返回时,我看不到更改,但是当我重新打开应用程序或切换到其他选项卡并返回时,我会看到。

2 个答案:

答案 0 :(得分:1)

在A页中,当您转到B页时,

Navigator.pushNamed(context, "/pageB").then((value) {
  if (value == true) {
    setState(() {
      // refresh page 1 here, you may want to reload your SharedPreferences here according to your needs
    });
  }
});

在B页中,当您想返回到A页时,请使用

Navigator.pop(context, true);

编辑:如果您没有命名路线,则可能需要在第一种情况下使用关注。

Navigator.push(context, MaterialPageRoute(builder: (context) => PageB())).then((value) {
  if (value == true) {
    setState(() {
      // refresh page 1 here, you may want to reload your SharedPreferences here according to your needs
    });
  }
});

答案 1 :(得分:0)

如果您要从pageA移到pageB:

在页面中的小部件按钮上单击,您需要调用以下代码:

_navigateAndDisplayData(
      BuildContext context) async {
    final returnVal = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => pageB()),
    );

    setState(() {
      // returnVal has true or false.
      if (returnVal){
         // Put your code here
       }

    });
  }

如果您总是希望从pageB中获取任何值来进行刷新。然后只需删除if语句。

在另一面PageB上,您想在刚刚使用的pageA上发送数据

Navigator.pop(context, true);