【发布时间】:2019-09-02 01:40:29
【问题描述】:
我有一个有状态的页面 A,其中包含一个存在于单独的有状态类中的小部件。
小部件在其 initState 方法中从 sharedPreferences 中获取一个数字并显示它,当我单击小部件时,它会路由到页面 B,页面 B 包含一个更改 sharedPreferences 中数字的函数。
当我返回时,我没有看到更改,但是当我重新打开应用程序或切换到其他选项卡并返回时,我看到了。
【问题讨论】:
我有一个有状态的页面 A,其中包含一个存在于单独的有状态类中的小部件。
小部件在其 initState 方法中从 sharedPreferences 中获取一个数字并显示它,当我单击小部件时,它会路由到页面 B,页面 B 包含一个更改 sharedPreferences 中数字的函数。
当我返回时,我没有看到更改,但是当我重新打开应用程序或切换到其他选项卡并返回时,我看到了。
【问题讨论】:
在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
});
}
});
【讨论】:
Navigator.pop(context, true); 的好地方,将其与 WillPopScope' 一起使用在其属性 onWillPop 中可确保无论何时使用后退按钮、后退箭头等任何方式弹出页面 B等等,小部件总是更新的。
如果您从 pageA 移动到 pageB:
在pageA小部件按钮点击需要调用以下代码:
_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);
【讨论】: