冻结包不能再为嵌套对象生成toJson代码



我们在单线程程序中发现了一个问题,它阻止我们生成.g。模型的Dart文件。大多数模型都是深度嵌套的,需要fromJson/toJson方法来与我们的后端通信。三周前,我们更新了frozen和整个build_runnerc/code-generator设置。我们修改了以下版本:

  • json_annotation: ^4.6.0 =>^ 4.7.0
  • json_serializable: ^6.3.1 =>^ 6.5.3
  • build_runner: ^2.1.10 =>2.3.2 ^
  • frozen: ^2.1.0+1 =>^ 2.2.0
  • freezed_annotation: ^ 2.0.0 =比;^ 2.2.0

几天前我们得到了这个错误信息运行build_runner:


[SEVERE] json_serializable on lib/src/entities/user/user_banking_info.dart (cached):
Could not generate `toJson` code for `documents` because of type `UserDocument`.
package:common/src/entities/user/user_banking_info.freezed.dart:109:26
╷
109 │   List<UserDocument> get documents {
│                          

在monorepo的其他包中,我们得到的错误消息是。未生成Dart文件:

Target of URI hasn't been generated: ''fetch_articles_response.g.dart''.
Try running the generator that will generate the file referenced by the URI.

使用的Flutter和Dart版本:

Flutter版本:3.3.7Dart SDK版本:2.18.4

pubspec。文章包的Yaml,相同的版本在通用包中使用:

name: article
version: 0.0.1
publish_to: none
environment:
sdk: ">=2.17.0 <3.0.0"
dependencies:
common:
path: ../common
freezed_annotation: ^2.2.0
json_annotation: ^4.7.0
dev_dependencies:
build_runner: ^2.1.10
freezed: ^2.1.0+1
json_serializable: ^6.3.1

user.dart

import 'package:common/common.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'user.freezed.dart';
part 'user.g.dart';
@freezed
class User with _$User {
const User._();
const factory User({
UserBankingInfo? banking_info,
}) = _User;
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
}

user_banking_info.dart

import 'package:common/src/entities/user/user_document.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'user_banking_info.freezed.dart';
part 'user_banking_info.g.dart';
@freezed
class UserBankingInfo with _$UserBankingInfo {
const factory UserBankingInfo({
@Default([]) List<UserDocument> documents,
}) = _UserBankingInfo;
factory UserBankingInfo.fromJson(Map<String, dynamic> json) => _$UserBankingInfoFromJson(json);
}

user_document.dart

import 'package:freezed_annotation/freezed_annotation.dart';
part 'user_document.freezed.dart';
part 'user_document.g.dart';
@freezed
class UserDocument with _$UserDocument {
const factory UserDocument({
String? id,
}) = _UserDocument;
factory UserDocument.fromJson(Map<String, dynamic> json) => _$UserDocumentFromJson(json);
}

感觉我已经尝试了这个工作所需的每个版本或包版本的组合,我不知道这个问题来自哪里。现在,我降级了应用程序中的所有包版本,以匹配以前工作的版本。每一个包装所使用的冷冻存在于每一个包装的单orepo中。由于版本约束,我还被迫使用json_annotation: ^4.7.0(版本约束"^4.6.0"On json_annotation允许4.7.0之前的版本,这是不允许的。

再次阅读冻结文档后,我还添加了

errors:
invalid_annotation_target: ignore

到我们的analysis_options。yaml和

targets:
$default:
builders:
json_serializable:
options:
explicit_to_json: true

到构建。

我也用每个包的最新版本进行了测试,但没有成功。降级我的Flutter SDK也没有帮助。

这个问题已经解决了,感谢@SunlightBro使用:

dependency_overrides:
freezed: 2.1.0

在应用程序的所有包中,因为应用程序使用的其他依赖项限制了analyzer的使用版本4.7.0代替5.2.0这是冷冻的要求。我可以通过运行dart pub deps找到这个限制。

相关内容

  • 没有找到相关文章

最新更新