Замороженный пакет больше не может генерировать код toJson для вложенного объекта

Мы обнаружили проблему в нашем монорепозитории, которая не позволяет нам создавать файлы .g.dart для наших моделей. Большинство моделей глубоко вложены друг в друга и нуждаются в методах fromJson/toJson для связи с нашим бэкендом. Три недели назад мы обновили заморозку и всю настройку 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
  • заморожено: ^2.1.0+1 => ^2.2.0
  • замороженная_аннотация: ^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 {
    │                          

В других пакетах нашего монорепозитория мы получаем сообщение об ошибке, что файл .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 тоже не помогло.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема была решена благодаря @SunlightBro с помощью:

dependency_overrides:
  freezed: 2.1.0

во всех пакетах приложения, потому что другие зависимости, используемые приложением, ограничивали использование анализатора до версии 4.7.0 вместо 5.2.0, которую требовал заморозил. Я смог найти это ограничение, запустив dart pub deps.

Другие вопросы по теме