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

使用Isar创建Collection遇构造参数错误及.g文件未生成求助

Isar与Freezed结合时构造参数不匹配问题的解决方法

问题场景

尝试创建结合Freezed的Isar Collection,代码如下:

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:isar/isar.dart';

part 'model.freezed.dart';
part 'model.g.dart';

@freezed
@Collection(ignore: {'copyWith'}, inheritance: false)
class Model with _$Model {
  const factory Model({
    required String address,
  }) = _Model;
  Id get id => Isar.autoIncrement;
  const Model._();
}

执行命令 flutter pub run build_runner build --delete-conflicting-outputs 时出现错误:

Constructor parameter does not match a property.
|
| required String address,
|

Freezed文件正常生成,但Isar对应的.g.文件未创建。

解决方案

1. 修正代码结构

核心问题是Isar默认未开启继承扫描,无法识别Freezed生成的子类属性,同时Id字段的定义不符合Isar要求。修正后的代码如下:

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:isar/isar.dart';

part 'model.freezed.dart';
part 'model.g.dart';

@freezed
@Collection(inheritance: true, ignore: {'copyWith'})
class Model with _$Model {
  const factory Model({
    required String address,
    @Id() Id? id,
  }) = _Model;

  const Model._();

  Id get id => id ?? Isar.autoIncrement;
}

2. 关键修改说明

  • 将@Collection注解的inheritance设为true:让Isar扫描Freezed生成的_Model子类属性,解决address参数无法匹配属性的问题。
  • 把id作为可选参数加入factory构造,并用@Id()注解标记:配合getter实现Id自动递增的同时,让Isar正确识别主键字段。

3. 确保依赖配置正确

检查pubspec.yaml中是否包含所需依赖:

dependencies:
  isar: ^3.1.0+1
  isar_flutter_libs: ^3.1.0+1
  freezed_annotation: ^2.4.1

dev_dependencies:
  build_runner: ^2.4.6
  isar_generator: ^3.1.0+1
  freezed: ^2.4.1

4. 重新执行构建命令

再次运行:

flutter pub run build_runner build --delete-conflicting-outputs

此时Freezed和Isar的生成文件都会正常创建。

内容的提问来源于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 06:05:59