首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >颤振冷冻法

颤振冷冻法
EN

Stack Overflow用户
提问于 2022-08-24 11:14:06
回答 3查看 344关注 0票数 0

我使用Freezed在我的颤振项目上生成数据类。

我做的每件事都和封装自述中提到的一样

代码语言:javascript
复制
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”。

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

为什么Freezed没有正确地生成该函数?我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-24 11:46:15

您必须添加以下部分:

代码语言:javascript
复制
part 'access_token.g.dart';

你不需要以下几点:

代码语言:javascript
复制
@JsonSerializable()

并确保运行(使用下面的buildwatch ):

代码语言:javascript
复制
flutter pub run build_runner build --delete-conflicting-outputs

我以您的例子为例,成功地使用以下方法生成了所有

代码语言:javascript
复制
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.0freezed: ^2.1.0+1build_runner: ^2.2.0, json_annotation: ^4.6.0json_serializable: ^6.3.1确保检查是否包含这些包(根据对此答案的评论中的OP,包丢失了)。

生成的.g.dart文件:

代码语言:javascript
复制
// 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,
    };
票数 3
EN

Stack Overflow用户

发布于 2022-08-24 11:21:08

您能尝试使用flutter发布运行build_runner构建-删除冲突输出吗?

票数 0
EN

Stack Overflow用户

发布于 2022-08-24 11:42:16

是零安全吗.?如果是用的话?在所有领域

也错过了达特的路

我会举个例子

代码语言:javascript
复制
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手表--删除-冲突-输出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73472124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档