Мы обнаружили проблему в нашем монорепозитории, которая не позволяет нам создавать файлы .g.dart для наших моделей. Большинство моделей глубоко вложены друг в друга и нуждаются в методах fromJson/toJson для связи с нашим бэкендом. Три недели назад мы обновили заморозку и всю настройку build_runnerc/code-generator. Мы изменили следующие версии:
Пару дней назад мы получили это сообщение об ошибке при запуске 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 {
│
В других пакетах нашего монорепозитория мы получаем сообщение об ошибке, что файл .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:
Версия флаттера: 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);
}
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);
}
Такое ощущение, что я пробовал каждую версию или комбинацию версий пакета, необходимых для этого, и я не могу понять, откуда эта проблема. Прямо сейчас я понизил все версии пакетов в нашем приложении, чтобы они соответствовали версиям, которые работали раньше. Каждый пакет, используемый заморозкой, существует в каждом пакете монорепозитория. Я также вынужден использовать json_annotation: ^ 4.7.0 из-за ограничений версии (ограничение версии «^ 4.6.0» в json_annotation допускает версии до 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 тоже не помогло.





Эта проблема была решена благодаря @SunlightBro с помощью:
dependency_overrides:
freezed: 2.1.0
во всех пакетах приложения, потому что другие зависимости, используемые приложением, ограничивали использование анализатора до версии 4.7.0 вместо 5.2.0, которую требовал заморозил. Я смог найти это ограничение, запустив dart pub deps.