首页 > 解决方案 > Flutter:Freezed 和 json_serializable 包的编译问题

问题描述

我正在尝试将freezedjson_serializable一起使用。我正在使用以下版本

freezed: ^0.9.2
json_serializable: ^3.2.5
freezed_annotation: ^0.7.1

我的冻结课看起来像这样

import 'package:flutter/foundation.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

part 'freezed_classes.freezed.dart';

@freezed
abstract class User with _$User {
  factory User(
      {@required String uid,
      String firstName,
      String lastName,
      String email,
      Map<int, String> pictures
      }) = _User;

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
}

我正在使用它来生成类

flutter pub run build_runner watch --delete-conflicting-outputs

该命令似乎执行成功,但我的 IDE 似乎抛出了这些编译问题

error: The method '_$_$_UserFromJson' isn't defined for the class '_$_User'. (undefined_method at  lib/freezed/freezed_classes.freezed.dart:68)
error: The method '_$_$_UserToJson' isn't defined for the class '_$_User'. (undefined_method at  lib/freezed/freezed_classes.freezed.dart:156)

知道为什么会发生这种情况吗?

我尝试了flutter clean和IDE重新启动,但这仍然存在。

标签: flutterdart

解决方案


根据freezed文档:

The changes necessary to make it compatible with json_serializable consists of two lines:

a new part: part 'model.g.dart';
a new constructor on the targeted class: factory Model.fromJson(Map<String, dynamic> json) => _$ModelFromJson(json);

您缺少以下part要求json_serializablepart freezed_classes.g.dart


推荐阅读