如何解决Flutter:原始目标页面被替换后如何获取pop值?
假设我有三页,A、B 和 C。
从页面 A 我有一个 FloatingActionButton
导航到页面 B,返回值带有 then()
语句。如果返回值等于 false
什么也没有发生,在任何其他情况下页面 A 将被刷新:
FloatingActionButton(
onPressed: () {
Navigator.of(context).pushNamed(B.routeName).then((value){
if (value != false){
_refresh(); // My own function to refresh page A
}
});
},...
)
在页面 B 中,我有一个 Scaffold
,只有一个背景屏幕和一个 FloatingButton
。按钮跳转到页面C,点击屏幕返回页面A,无需刷新。
Scaffold(
body: GestureDetector(
onTap: () {
Navigator.of(context).pop(false);
},...
),FloatingActionButton(
onPressed: () {
Navigator.of(context).pushReplacementNamed(C.routeName);
},)
我的问题是,当我单击浮动操作按钮转到页面 C 时,页面 B 弹出,页面 A 在其 then()
语句中获取空值。
如何避免页面 B 弹出,并将页面 A 的 then()
语句中的返回值“链接”到页面 C 而不是 B 的 pop()
语句的值?
这里真正的问题是当我弹出页面 C 时页面 A 不会刷新,因为它的 then()
已经被页面 B 触发,而不是当页面 B 弹出时它刷新的事实。
解决方法
在页面 B 而不是 pushReplacementNamed 你可以只是推送并等待页面 c 中的结果然后当它返回值时你可以弹出到页面 A, 在页面 B 你可以写:
onPressed: () {
Navigator.of(context).pushNamed(C.routeName).then((value){
Navigator.of(context).pop(false);
});
},
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。