如何通过go_router_builder向go_router根路由传递参数?
解决go_router_builder传递自定义对象问题
直接在路由实例化时传入对象
go_router_builder 中通过 $extra 字段传递自定义对象的方式很直接,只需要在导航时实例化 HomeRoute 时传入 Foo 对象即可:
// 使用 push 导航并传递 Foo 对象 context.push(HomeRoute(Foo()).location); // 或者使用 go 方法 context.go(HomeRoute(Foo()).location);
如果觉得位置参数不够清晰,可以把构造函数改成命名参数:
class HomeRoute extends GoRouteData { final Foo? $extra; HomeRoute({this.$extra}); // 改为命名参数 @override Widget build(BuildContext context, GoRouterState state) { return HomeScreen(foo: $extra); // 将对象传递给页面 } }
此时传递对象的写法更明确:
context.push(HomeRoute($extra: Foo()).location);
注意事项
$extra用于传递不需要编码到 URL 中的内存对象,因此Foo类不需要实现序列化接口(比如JsonSerializable)。- 确保导航时传入的
Foo对象在路由栈存活期间保持有效,避免因对象被回收导致异常。
内容的提问来源于stack exchange,提问作者iDecode
相关产品推荐
相关产品推荐

