Flutter go_router如何将结果返回到上一页?

dan*_*nte 35 navigation routes dart flutter gorouter

我正在尝试打开一个页面并使用 go_router 包获取返回的结果。在导航 1.0 中我使用这个:

final result = await Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => const SecondRoute()),
);
// handle result
Run Code Online (Sandbox Code Playgroud)

但我似乎无法用 go_router 做到这一点。有什么解决办法或者解释吗?

Adi*_*ora 20

最新版本的 go_router 包现在支持此功能。要在从屏幕弹出时传递数据,您可以这样做:

context.pop('value');
Run Code Online (Sandbox Code Playgroud)

要取回该值,您的代码应如下所示:

String? val = await context.pushNamed('secondRoute');
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,谢谢

  • 注意:此功能来自*6.5.0*及以上版本 (2认同)

Jon*_*nas 8

您可以使用 来执行此操作GoRouter.of(context).addListener

首先推送新页面,然后添加监听器

GoRouter.of(context).push("/page/${page!.id}/edit");
GoRouter.of(context).addListener(watchRouteChange);
Run Code Online (Sandbox Code Playgroud)

监听器函数看起来像这样

  watchRouteChange() {
    if (!GoRouter.of(context).location.contains("/edit")) {  // Here you check for some changes in your route that indicate you are no longer on the page you have pushed before
      // do something
      GoRouter.of(context).removeListener(watchRouteChange); // remove listener
    }
  }


Run Code Online (Sandbox Code Playgroud)

  • 这种情况下如何获取返回结果呢? (2认同)