Flutter Freezed 模型升级后 JsonSerialized 和 JsonKey 问题

Osm*_*lez 7 flutter json-serializable freezed json-annotation

我的应用程序运行正常,但在 pub Upgrade --major-versions 之后,我在所有型号上都遇到问题。型号示例:

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
abstract class LeadModel with _$LeadModel {
  const LeadModel._();

  @JsonSerializable(fieldRename: FieldRename.snake)
  const factory LeadModel({
    required int id,
    int? formId,
    @JsonKey(name: 'contact__first_name', defaultValue: '')
    @Default('')
        String contactFirstName,
    @JsonKey(name: 'contact__last_name', defaultValue: '')
    @Default('')
        String contactLastName,
    @JsonKey(name: 'contact__email', defaultValue: '')
    @Default('')
        String contactEmail,
    @JsonKey(name: 'contact__phone', defaultValue: '')
    @Default('')
        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);
}
Run Code Online (Sandbox Code Playgroud)

问题:

The annotation 'JsonSerializable' can only be used on classes
The annotation 'JsonKey' can only be used on fields or getters
...
Run Code Online (Sandbox Code Playgroud)

为了使其能够在几周前的升级中工作,我在 pubspec.yaml 中为 json_annotation: '4.0.1' 和 json_serialized: '4.1.4' 设置了固定版本,但我想知道是否还有其他方法更新这些软件包没有任何问题。

我错过了什么,如何才能达到与使用冻结之前相同的效果?

Dan*_*len 9

正如此处所示,作者意识到了这一限制。就我个人而言,我不同意“仅禁用警告”的解决方案,因为它会压制合法的警告,而这几乎从来都不是有效的工程解决方案。其中提出的替代方案表明在您确定警告没有问题的任何用法之上添加以下注释:

// 忽略:invalid_annotation_target

对于大型代码库来说,这也不是很好,但它让您有责任决定忽略什么,同时还允许您在其他地方收到有效的警告。