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

