Flutter中pub get执行成功,但build_runner提示‘Nothing to build’且缺失*.g.dart文件
我完全懂你这种卡壳的烦躁——明明依赖都下好了,代码注解也加得规规矩矩,结果build_runner就是不干活,连个.g.dart文件都不肯生成,太闹心了!结合你给出的配置和操作记录,我整理了几个针对性的排查和解决方向,你可以挨个试一遍:
1. 死磕part语句的细节
你在song_model.dart里写的part 'song_model.g.dart';看起来没问题,但要抠这几个容易踩的坑:
- 确保part的文件名和当前dart文件的文件名大小写完全一致(比如你文件是
SongModel.dart但part写的是song_model.g.dart,Windows系统虽然不区分大小写,但Dart的构建系统认死理); - 两个文件必须在同一个目录下,如果你的model放在子目录(比如
lib/models/),part语句不用加目录前缀,保持part 'song_model.g.dart';即可,但要确认没有误写路径; - part语句的位置必须在所有import之后,类定义之前,不能搞反顺序。
2. 验证Hive注解的完整性
再仔仔细细检查一遍你的Hive注解:
- 确认
@HiveType(typeId: 0)和@HiveField(n)没有拼写错误,比如有没有漏写括号里的参数,或者把@HiveField写成@HiveType; - 确保每个类的
typeId(0和1)在你的Hive实例里是唯一的,不能和其他Hive实体重复; - 所有需要持久化的字段都加了
@HiveField注解,没有遗漏。
3. 修复Pub Cache缺失bin目录的核心问题
你提到删除Pub Cache后,pub get成功但bin子目录还是缺失,这是关键线索——这说明build_runner或者hive_generator的可执行文件根本没下全,自然没法生成代码。试试这个命令修复缓存:
dart pub cache repair
这个命令会重新下载所有缺失的依赖文件,包括build_runner和hive_generator的生成器组件,修复后再重新执行flutter clean -> flutter pub get -> dart run build_runner build --delete-conflicting-outputs。
4. 强制指定Hive生成器运行
有时候build_runner会因为项目结构问题漏扫文件,你可以直接指定只运行hive_generator的生成器,避免其他生成器干扰:
dart run build_runner build --delete-conflicting-outputs -t hive_generator:generator
这个命令会精准触发Hive的代码生成逻辑,不会浪费时间扫其他无关的生成器。
5. 清除IDE的分析缓存
如果你用的是VS Code或者Android Studio,试试这些操作:
- 关闭所有打开的dart文件,重启IDE;
- 在VS Code中打开命令面板(Ctrl+Shift+P),执行「Dart: Restart Analysis Server」;
- 或者手动删除IDE的缓存目录(比如VS Code的
.vscode目录,Android Studio的.idea目录),然后重新打开项目。
6. 尝试经过验证的依赖版本组合
你试过换旧版本,但可以试试这个经过很多开发者验证的兼容组合:
dependencies: hive: ^2.2.3 hive_flutter: ^1.1.0 dev_dependencies: hive_generator: ^2.0.0 build_runner: ^2.3.0
换版本后一定要彻底清理旧缓存:删除.dart_tool、build、pubspec.lock文件,再执行flutter clean -> flutter pub get -> 运行build_runner命令。
最后再排查一下项目根目录的路径有没有特殊字符(比如空格、中文、特殊符号),Windows下路径有特殊字符经常会导致build_runner找不到文件。
希望你能早点解决这个问题,顺利推进你的音乐APP开发!
内容来源于stack exchange

