使用Isar与Freezed创建模型时.g.文件未生成,如何协同生成?
问题:Freezed与Isar共存时无法生成.g.dart文件
代码示例
import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:isar/isar.dart'; part 'model.freezed.dart'; part 'model.g.dart'; @freezed @Collection(ignore: {'copyWith'}) class Model with _$Model { const factory Model({ required Id id, required String name, }) = _Model; const Model._(); }
报错信息
Target of URI hasn't been generated: 'package:my_app/entity/model.g.dart'. Try running the generator that will generate the file referenced by the URI.
解决步骤
1. 确认pubspec.yaml依赖配置完整
确保你的pubspec.yaml中包含所有必要的开发依赖,并且启用Isar生成器:
dependencies: freezed_annotation: ^2.4.1 isar: ^3.1.0 # 其他业务依赖 dev_dependencies: build_runner: ^2.4.4 freezed: ^2.4.1 isar_generator: ^3.1.0 # 其他开发依赖 # 启用Isar代码生成器 builders: isar_generator: enabled: true
配置完成后执行dart pub get或flutter pub get安装依赖。
2. 保证类结构符合双框架要求
你的代码结构已经符合要求,但需注意两个关键点:
- 必须保留
const Model._();私有构造函数,这是Isar生成代码的必要条件 @Collection注解中ignore: {'copyWith'}必须添加,避免Freezed生成的copyWith方法与Isar冲突
3. 执行正确的代码生成命令
不要单独运行Freezed的生成命令,使用build_runner一次性生成Freezed和Isar的代码:
- Dart项目:
dart run build_runner build --delete-conflicting-outputs
- Flutter项目:
flutter pub run build_runner build --delete-conflicting-outputs
--delete-conflicting-outputs参数会清理旧的生成文件,避免因缓存导致的生成失败。
4. 排查基础错误
- 检查
part 'model.g.dart';和part 'model.freezed.dart';的文件名是否与当前dart文件完全一致(大小写、路径都要匹配) - 确认
Id类型是从package:isar/isar.dart正确导入的,没有拼写错误
内容的提问来源于stack exchange,提问作者sub
相关产品推荐
相关产品推荐

