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
相关产品推荐
相关产品推荐

