我们在monorepo中发现了一个问题,它阻止我们为模型生成.g.dart文件。大多数模型都是深度嵌套的,需要fromJson/toJson方法来与后端通信。三周前,我们更新了freezed和整个build_runnerc/代码生成器的设置。我们更改了以下版本:
- json注解:^4.6.0 =〉^4.7.0
- json_可序列化:^6.3.1 =〉^6.5.3
- 生成运行程序:^2.1.10 =〉^2.3.2
- 已冻结:^2.1.0+1 =〉^2.2.0
- 冻结注解(_N):^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的其他软件包中,我们收到了.g.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.7 Dart 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);
}
用户银行信息.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);
}
用户文档.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);
}
我已经尝试了所有的包版本或者包版本的组合,但是我还是找不到问题的根源。现在我降级了应用程序中的所有包版本,以匹配以前的包版本。freezed使用的每个包都存在于monorepo的每个包中。我还被迫使用json_annotation:^4.7.0,因为版本限制(json_annotation的版本限制“^4.6.0”允许4.7.0之前的版本,但这是不允许的。)。
在再次阅读冻结的文档后,我还添加了
errors:
invalid_annotation_target: ignore
到我们的analysis_options.yaml和
targets:
$default:
builders:
json_serializable:
options:
explicit_to_json: true
添加到每个包中的build.yaml。
我也用每个软件包的最新版本测试过,但是没有成功。降级我的Flutter SDK也没有帮助。
1条答案
按热度按时间yacmzcpb1#
此问题已通过@SunlightBro解决,方法是使用:
因为应用程序使用的其他依赖项将analyzer的使用限制为版本4.7.0,而不是freezed所需的5.2.0。我可以通过运行
dart pub deps
找到此限制。