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

问题描述 投票:0回答:2

我的应用程序运行正常,但在 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);
}

问题:

The annotation 'JsonSerializable' can only be used on classes
The annotation 'JsonKey' can only be used on fields or getters
...

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

我缺少什么,如何才能达到与使用 freeze 之前相同的效果?

flutter freezed json-serializable json-annotation
2个回答
9
投票

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

//忽略:invalid_annotation_target

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


0
投票

将其添加到文件analysis_options.yaml中 分析仪: 排除: - “/*.g.dart” - “/*.freezed.dart” 错误: invalid_annotation_target:忽略

© www.soinside.com 2019 - 2024. All rights reserved.