如何修复Flutter中GoRouter.routeInformationProvider缺失报错
报错根因
该问题基本不是代码传参错误导致,核心触发原因有两个:一是codelab示例默认拉取的go_router版本和示例编写时的API版本不匹配,高版本go_router对Web端的路由参数校验更严格;二是根MaterialApp.router配置漏传路由相关参数,或旧的Web构建缓存残留导致校验失败。
修复步骤
按顺序执行以下操作即可解决:
- 锁定依赖版本
打开项目根目录的pubspec.yaml,将go_router依赖指定为codelab适配的稳定版本,避免高版本API变更引发的兼容问题:
保存后在项目根目录执行dependencies: flutter: sdk: flutter go_router: ^6.0.2flutter pub get拉取对应版本依赖。 - 核对根路由配置
打开入口文件,确认MaterialApp.router的三个路由必填参数全部传入,不要遗漏routeInformationProvider,正确配置示例如下:final GoRouter _router = GoRouter( routes: [ GoRoute(path: '/', builder: (context, state) => const HomePage()), // 其他路由配置 ], ); class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp.router( title: 'Boring to Beautiful Demo', theme: ThemeData(useMaterial3: true), // 以下三个参数必须全部传入,*缺一个在Web端就会触发该报错* routeInformationParser: _router.routeInformationParser, routeInformationProvider: _router.routeInformationProvider, routerDelegate: _router.routerDelegate, ); } } - 清理构建缓存后重启
Web端的Flutter构建缓存很容易残留旧配置导致报错,依次执行以下命令清理环境后重新启动项目:flutter clean flutter pub get flutter run -d chrome - 端口冲突兜底处理
如果上述操作完成后仍报错,关闭所有打开的Flutter调试Chrome窗口,指定新端口启动服务,避免旧页面的缓存脚本干扰:flutter run -d chrome --web-port=8080
验证标准
项目启动后浏览器控制台不再抛出该错误,手动修改地址栏路由路径可以正常跳转对应页面,即为修复完成。
内容的提问来源于stack exchange,提问作者pomoworko.com
相关产品推荐
相关产品推荐

