我使用Freezed在我的颤振项目上生成数据类。
我做的每件事都和封装自述中提到的一样
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);
}构建成功完成。
当我运行这个应用程序时:
lib/services/models/access_token.freezed.dart:118:7:错误:未找到的方法:‘$$_AccessTokenFromJson’。lib/services/models/access_token.freezed.dart:157:12:(Json);^_$$AccessTokenFromJson错误:未为类$_AccessToken定义方法“$$AccessTokenToJson”。
为什么Freezed没有正确地生成该函数?我遗漏了什么?
发布于 2022-08-24 11:46:15
您必须添加以下部分:
part 'access_token.g.dart';你不需要以下几点:
@JsonSerializable()并确保运行(使用下面的build或watch ):
flutter pub run build_runner build --delete-conflicting-outputs我以您的例子为例,成功地使用以下方法生成了所有:
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);
}使用freezed_annotation: ^2.1.0、freezed: ^2.1.0+1、build_runner: ^2.2.0, json_annotation: ^4.6.0、json_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,
};发布于 2022-08-24 11:21:08
您能尝试使用flutter发布运行build_runner构建-删除冲突输出吗?
发布于 2022-08-24 11:42:16
是零安全吗.?如果是用的话?在所有领域
也错过了达特的路
我会举个例子
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
part 'comments.model.freezed.dart';
part 'comments.model.g.dart'; // missing
@freezed
@immutable
class CommentsModel with _$CommentsModel {
const CommentsModel._();
const factory CommentsModel({
int? id,
@JsonKey(name: 'x_post_id') int? xPostId,
@JsonKey(name: 'x_user_id') int? xUserId,
@JsonKey(name: 'x_body') String? xBody,
@JsonKey(name: 'comment_likes_count') int? commentLikesCount,
@JsonKey(name: 'comment_like_by_user_count') int? commentLikeByUserCount,
@JsonKey(name: 'created_at') DateTime? createdAt,
@JsonKey(name: 'updated_at') DateTime? updatedAt,
}) = _CommentsModel;
factory CommentsModel.fromJson(Map<String, dynamic> json) =>
_$CommentsModelFromJson(json);
}要运行build_runner,请同时使用此方法
build_runner手表--删除-冲突-输出
https://stackoverflow.com/questions/73472124
复制相似问题