请在下面提供我的解释。 我有一个包含2个BottomNavigationBar项目的页面:
Page1(),
Page2(),
在Page1
中有一个按钮,可导航到另一个名为PostSomethingPage
的页面:
// in Page1
onPressed: () => Navigator.push(
context, MaterialPageRoute<bool>(builder:
(context) => PostSomethingPage()))
.then((isPostSuccess) => isPostSuccess
? print('is Success!') : print('Failed!'));
您可以看到Page1
期望从PostSomethingPage
返回布尔值,并将基于该值进行打印。
这是PostSomethingPage
中返回结果的代码:
// in PostSomethingPage
Navigator.pop(context, isSuccess);
然后,当我们返回到Page1
时,已经收到了来自回调的值,并相应地执行了print语句,此时一切似乎都很好。
但是当我导航到Page2
并返回到Page1
时出现了一个问题
注意:至此,我从Page1
=> PostSomethingPage
=>返回到Page1
,并得到结果,然后转到Page2
因为当我再次回到Page1
时,打印语句将根据LAST已知值再次打印。但是我想要的是将回调值重置为空,而不是使用true
或false
答案 0 :(得分:1)
使用变量存储PostSomethingPage返回的值
//our variable initialized with null
bool isPostSuccess;
@override
Widget build(BuildContext context) {
return FlatButton(onPressed: () async {
//going to PostSomethingPage from Page1
isPostSuccess = await Navigator.of(context).push(
MaterialPageRoute<bool>(builder: (context) {
return PostSomethingPage();
})
);
}, child: Text(''));
//we are back at the Page1
//isPostSuccess will not be null
}
现在在进入第2页之前,只需将isPostSuccess的值再次设置为空
//going to Page2 from Page1
isPostSuccess = null;
Navigator.of(context).push(
MaterialPageRoute<bool>(builder: (context) {
return Page2();
})
);