首页 > 解决方案 > Flutter:原目标页面被替换后如何获取pop值?

问题描述

假设我有三个页面,A、B 和 C。

从页面 AIFloatingActionButton导航到页面 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 弹出,并将then()页面 A 的语句中的返回值“链接”到pop()页面 C 而不是 B 的语句值?

这里真正的问题是当我弹出页面C时页面A不会刷新,因为它then()已经由页面B触发,而不是页面B弹出时它刷新的事实。

标签: flutterflutter-navigation

解决方案


在页面 B 而不是pushReplacementNamed中,您可以在页面 c 中推送并等待结果,然后当它返回值时,您可以弹出到页面 A,在页面 B 中您可以编写:

  onPressed: () {
Navigator.of(context).pushNamed(C.routeName).then((value){
  Navigator.of(context).pop(false);
});

},


推荐阅读