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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:45:08