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

Flutter中Go Router替代Navigator传递对象参数的实现方案

使用Go Router实现对象参数传递的方案

Go Router支持通过state.extra字段传递自定义对象参数,无需局限于路径参数,以下是对应原Navigator代码的实现方式:

1. 配置路由

在Go Router的路由列表中,为目标页面配置路由,通过state.extra获取传递的对象参数:

GoRoute(
  path: '/channel', // 对应原Routes.CHANNEL_PAGE的路径
  builder: (context, state) {
    // 转换extra参数的类型为自定义的ChannelPageArgs
    final args = state.extra as ChannelPageArgs;
    return ChannelPage(
      channel: args.channel,
      initialMessage: args.initialMessage,
    );
  },
)

2. 跳转并传递参数

使用context.push()(和原Navigator.pushNamed行为一致,保留原页面)或context.go()(替换当前路由栈顶部),通过extra参数传入对象:

context.push('/channel', extra: ChannelPageArgs(
  channel: channel,
  initialMessage: message,
));

注意事项

  • 确保ChannelPageArgs类可以正常在路由间传递,若需要持久化或跨进程处理,建议让类实现序列化逻辑(比如使用freezed、json_serializable等工具)
  • 如果使用context.go(),会替换当前路由栈的顶部页面,若需要保留原页面的返回栈,优先使用context.push()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:35:19