未找到颤振冻结方法

gen*_*ser 4 code-generation flutter freezed

我用来Freezed在我的 flutter 项目上生成数据类。

我所做的一切与包自述文件中提到的完全一样:

import 'package:freezed_annotation/freezed_annotation.dart';

part 'access_token.freezed.dart';

@freezed
class AccessToken with _$AccessToken {
  @JsonSerializable()
  const factory AccessToken(
    @JsonKey(name: 'access_token') String accessToken,
    @JsonKey(name: 'refresh_token') String refreshToken,
  ) = _AccessToken;

  factory AccessToken.fromJson(Map<String, Object?> json) =>
      _$AccessTokenFromJson(json);
}
Run Code Online (Sandbox Code Playgroud)

构建成功完成。

当我运行该应用程序时,我得到:

lib/services/models/access_token.freezed.dart:118:7:错误:找不到方法:'_$$_AccessTokenFromJson'。_$$ AccessTokenFromJson(json); ^^^^^^^^^^^^^^^^^^^^^^^^ lib/services/models/access_token.freezed.dart:157:12:错误:方法“ $$ AccessTokenToJson”不是“ t 为类“ $_AccessToken”定义。

  • “_$ AccessToken”来自“package:tenant_app/services/models/access_token.dart”(“lib/services/models/access_token.dart”)。尝试将名称更正为现有方法的名称,或定义名为“ $$_AccessTokenToJson”的方法。返回 _$$_AccessTokenToJson(

为什么Freezed没有正确生成该函数?我缺少什么?

Rob*_*erg 12

您必须添加以下部分:

part 'access_token.g.dart';
Run Code Online (Sandbox Code Playgroud)

并且您不需要以下内容:

@JsonSerializable()
Run Code Online (Sandbox Code Playgroud)

并确保您运行(使用buildwatch以下):

flutter pub run build_runner build --delete-conflicting-outputs
Run Code Online (Sandbox Code Playgroud)

我以您的示例为例并使用以下命令成功生成了所有内容:

import 'package:freezed_annotation/freezed_annotation.dart';

part 'access_token.freezed.dart';
part 'access_token.g.dart';

@freezed
class AccessToken with _$AccessToken {
  const factory AccessToken(
    @JsonKey(name: 'access_token') String accessToken,
    @JsonKey(name: 'refresh_token') String refreshToken,
  ) = _AccessToken;

  factory AccessToken.fromJson(Map<String, Object?> json) => _$AccessTokenFromJson(json);
}
Run Code Online (Sandbox Code Playgroud)

使用freezed_annotation: ^2.1.0freezed: ^2.1.0+1build_runner: ^2.2.0, json_annotation: ^4.6.0json_serializable: ^6.3.1 确保检查是否包含这些内容(根据此答案评论中的 OP,软件包丢失)。

生成的.g.dart文件:

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'access_token.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

_$_AccessToken _$$_AccessTokenFromJson(Map<String, dynamic> json) =>
    _$_AccessToken(
      json['access_token'] as String,
      json['refresh_token'] as String,
    );

Map<String, dynamic> _$$_AccessTokenToJson(_$_AccessToken instance) =>
    <String, dynamic>{
      'access_token': instance.accessToken,
      'refresh_token': instance.refreshToken,
    };
Run Code Online (Sandbox Code Playgroud)