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

Flutter Freezed模型执行pub大版本升级后JsonSerializable与JsonKey注解报错问题咨询

解决Freezed模型在pub大版本升级后的注解错误问题

这问题我之前也碰到过,是因为新版本的json_annotation和json_serializable收紧了注解的使用规则,同时Freezed的集成方式也有了小调整,你原来的写法已经不符合最新规范了。下面是具体的解决步骤和修改后的代码:

错误原因分析

  1. @JsonSerializable的使用限制:新版本的json_annotation要求这个注解只能用在普通类上,不能加在抽象类上,但你原来的代码把它加在了abstract class LeadModel上,所以触发了第一个错误。
  2. 注解重复/顺序问题:你同时在字段上用了@JsonKey(defaultValue: '')和@Default(''),虽然旧版本兼容,但新版本的处理逻辑更严格,可能会导致注解冲突,而且@Default已经能满足默认值的需求,不需要重复配置。

具体修改步骤

1. 调整类的定义和注解位置

  • 移除abstract关键字,新版本Freezed不需要用抽象类来定义模型
  • 将@JsonSerializable(fieldRename: FieldRename.snake)移到类顶部,和@freezed注解并列

2. 简化字段注解

  • 去掉@JsonKey中的defaultValue参数,只保留@Default来设置默认值,同时保留@JsonKey(name: ...)来映射自定义字段名

修改后的完整代码

import 'package:app_220/models/Leads/LeadFieldModel.dart';
import 'package:flutter/foundation.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:intl/intl.dart';

part 'LeadModel.freezed.dart';
part 'LeadModel.g.dart';

@freezed
@JsonSerializable(fieldRename: FieldRename.snake)
class LeadModel with _$LeadModel {
  const LeadModel._();

  const factory LeadModel({
    required int id,
    int? formId,
    @Default('') @JsonKey(name: 'contact__first_name') String contactFirstName,
    @Default('') @JsonKey(name: 'contact__last_name') String contactLastName,
    @Default('') @JsonKey(name: 'contact__email') String contactEmail,
    @Default('') @JsonKey(name: 'contact__phone') String contactPhone,
    int? staffId,
    @Default('') String staffLastName,
    DateTime? creationTime,
    @Default('') String sourceUrl,
    @Default('') String sourceIp,
    @Default(0) int viewed,
    List<LeadFieldModel>? leadData,
  }) = _LeadModel;

  factory LeadModel.fromJson(Map<String, dynamic> json) => _$LeadModelFromJson(json);
}

最后验证

修改完成后,运行以下命令重新生成代码:

dart run build_runner build --delete-conflicting-outputs

这样就能正常生成Freezed和JSON序列化的代码,且不用再固定旧版本的包了。

内容的提问来源于stack exchange,提问作者Osmany Becerra Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:14:10