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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:40:25