You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中go_router如何实现Navigator.push.then导航返回回调

go_router 实现页面返回回调的方案

go_router 本身基于Flutter原生Navigator封装,完全支持和原生.then()监听页面返回完全一致的效果,不需要额外复杂配置。很多刚接触的开发者误以为它改了这套逻辑,其实只是对Navigator做了上层包装,Future回调的核心机制完全保留了。

核心实现方式

go_router 所有压栈式跳转的push类方法,本身就返回Future对象,和原生Navigator.push的返回值逻辑完全对齐,直接链式调用then就能监听返回事件、拿到回传参数。

参考实现代码:

// 跳转逻辑和原生写法几乎无差异
GoRouter.of(context).push(
  '/xyz-screen', // 提前在go_router路由表中配置的XyzScreen对应路径
).then((value) {
  // 目标页面执行pop返回当前页时,这里会自动触发
  // value就是目标页面pop时携带的回传参数
  _someFunction();
});

目标页面回传参数的写法和原生完全一致:

// 在XyzScreen触发返回时,把要回传的参数传入pop方法即可
context.pop('需要回传给上一页的内容');

注意事项

  • 除了push,pushNamed等所有以push开头的压栈跳转方法,都支持这种then回调写法
  • 不要用go/goNamed这类直接替换路由栈的跳转方法,这类方法不会把新页面压入当前栈顶,无法触发返回回调
  • 习惯async/await异步写法的话也可以直接用,和普通Future的用法没有区别,示例:
// async/await 写法示例
void _handleJump() async {
  final returnParams = await GoRouter.of(context).push('/xyz-screen');
  // 等页面返回后才会执行后续逻辑
  _someFunction();
}

内容的提问来源于stack exchange,提问作者ravipatel0508

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:21:23