搭配auto_route的Flutter build_runner卡顿后无信息报错求助
执行命令 flutter pub run build_runner build --delete-conflicting-outputs 时,搭配 auto_route 仅卡顿数分钟后无任何报错信息就失败,该命令在其他项目可正常运行,说明问题仅存在于当前项目。当前项目依赖清单如下:
environment: sdk: '>=2.18.6 <3.0.0' dependencies: flutter: sdk: flutter bloc: ^8.1.0 flutter_bloc: ^8.0.1 equatable: ^2.0.5 intl: ^0.18.0 formz: ^0.4.0 uuid: ^3.0.4 shared_preferences: ^2.0.8 flutter_secure_storage: ^8.0.0 cupertino_icons: ^1.0.2 auto_route: ^5.0.4 auto_route_generator: ^5.0.3 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 build_runner: ^2.3.3
已尝试执行 flutter pub cache repair、dart pub get、flutter pub get,以及卸载重装 build_runner、auto_route 和 auto_route_generator,但问题仍未解决,以下是具体排查建议:
检查 auto_route 配置文件语法
仔细核对路由定义文件(如app_router.dart)的注解与配置:确认@MaterialAutoRouter参数是否合法,所有页面是否正确添加@RoutePage()注解,是否存在路由名称重复、参数类型不匹配等问题。这类隐性语法错误往往不会抛出明确报错,但会导致生成器停滞退出。启用 build_runner 详细日志
执行命令时添加 verbose 参数,查看生成器的具体执行流程,定位卡顿环节:flutter pub run build_runner build --delete-conflicting-outputs -v通过日志可以看到生成器在处理哪个文件时停滞,快速锁定问题源。
排查项目异常文件与循环依赖
检查项目中是否存在循环导入的 Dart 文件,或存在语法错误的文件(如未闭合的括号、缺失分号)。这类问题会卡住 build_runner 的解析器,导致无报错退出。可尝试临时注释部分页面的路由配置,逐步排查出问题页面。手动清理缓存文件
删除项目根目录下的.dart_tool和build文件夹,再重新执行flutter pub get和 build_runner 命令。自动清理可能无法彻底清除旧缓存,手动清理能避免缓存冲突。调整依赖版本适配 SDK
当前 SDK 版本为 2.18.6,尝试降低 auto_route 和 build_runner 的版本以适配:比如将 auto_route 降至5.0.0,build_runner 降至2.2.0,重新安装依赖后再执行构建,排除版本兼容性问题。排查第三方依赖冲突
临时移除 bloc、flutter_bloc 等非核心依赖,仅保留 auto_route 相关与基础 Flutter 依赖,执行 build_runner 命令。若能正常运行,再逐个加回依赖,排查出冲突的第三方包。
内容的提问来源于stack exchange,提问作者Andrew Downing

