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

Flutter如何解决GoRouter.routeInformationProvider缺失报错

问题根因

这个报错不是项目本身的业务逻辑问题,是依赖版本不匹配导致的:

  • 示例项目的pubspec.yaml没有锁定go_router的依赖版本范围,你本地拉取依赖时会自动安装符合版本约束的最新版go_router,而示例代码是基于旧版go_router的API写的。
  • go_router从5.0版本开始调整了路由初始化的校验规则,旧写法只传routeInformationParser和routerDelegate两个参数,缺少强制要求的routeInformationProvider,就会触发你看到的断言报错。
修复方案

二选一即可:

  • 适配新版go_router(推荐)
    打开项目中配置MaterialApp.router的文件(通常是main.dart或入口的app组件文件),补全路由相关的三个配置参数,全部直接使用你创建的GoRouter实例自带的属性即可,不需要自定义实现:
    // 假设你已经提前创建了GoRouter实例命名为router
    final GoRouter router = GoRouter(
      // 原有路由配置完全不用改
      routes: [],
    );
    
    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp.router(
          title: 'Boring to Beautiful',
          theme: ThemeData(/* 原有主题配置保持不变 */),
          // 补全下面三个参数
          routeInformationProvider: router.routeInformationProvider,
          routeInformationParser: router.routeInformationParser,
          routerDelegate: router.routerDelegate,
        );
      }
    }
    
    改完完全重启应用(不要用热重载)即可正常运行。
  • 锁死旧版兼容依赖
    如果你不想改初始化代码,可以直接把go_router版本锁定到示例编写时兼容的4.5.1版本。打开pubspec.yaml修改go_router依赖:
    dependencies:
      flutter:
        sdk: flutter
      go_router: 4.5.1 # 不要加^前缀,强制锁死版本
    
    修改后执行flutter pub get拉取对应版本依赖,再启动应用就不会报错。

补充说明:go_router 5.0版本的更新日志中明确标注了这个API breaking change,要求所有升级到该版本及以上的应用必须传入三个路由参数,旧的两参数写法已经被废弃。官方示例后续会同步更新适配新版依赖,目前用上述两种方案都可以正常跑通全部教程流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:27:14