如何在 Flutter 中重置 Navigator.pop 回调值?
How do I reset the Navigator.pop call back value in Flutter?
请容忍我下面的解释。
我有一个包含 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
的 return 布尔值并将基于它进行打印。
这是 PostSomethingPage
中的代码 return 结果:
// in PostSomethingPage
Navigator.pop(context, isSuccess);
然后一旦我们回到Page1
,回调的值已经被接收并相应地执行了打印语句,此时一切似乎都很好。
但是当我导航到 Page2
并返回到 Page1
时出现问题
注意:此时我已经从 Page1
=> PostSomethingPage
=> 返回 Page1
结果,然后转到 Page2
因为当我再次回到 Page1
时,打印语句将根据最后的已知值再次打印。但我想要的是将回调值重置为空,而不是 true
或 false
使用变量存储值 return by 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 的值设置为 null
//going to Page2 from Page1
isPostSuccess = null;
Navigator.of(context).push(
MaterialPageRoute<bool>(builder: (context) {
return Page2();
})
);
请容忍我下面的解释。 我有一个包含 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
的 return 布尔值并将基于它进行打印。
这是 PostSomethingPage
中的代码 return 结果:
// in PostSomethingPage
Navigator.pop(context, isSuccess);
然后一旦我们回到Page1
,回调的值已经被接收并相应地执行了打印语句,此时一切似乎都很好。
但是当我导航到 Page2
并返回到 Page1
时出现问题
注意:此时我已经从 Page1
=> PostSomethingPage
=> 返回 Page1
结果,然后转到 Page2
因为当我再次回到 Page1
时,打印语句将根据最后的已知值再次打印。但我想要的是将回调值重置为空,而不是 true
或 false
使用变量存储值 return by 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 的值设置为 null
//going to Page2 from Page1
isPostSuccess = null;
Navigator.of(context).push(
MaterialPageRoute<bool>(builder: (context) {
return Page2();
})
);