Почему build_runner не генерирует файлы при сериализации JSON в dart / flutter

Я просто пытаюсь сгенерировать свои файлы с помощью той же команды, что и 3 месяца назад (я не очень хорошо разбираюсь в бэкэнде и DevOps), и теперь она больше не генерирует файлы. Он говорит мне использовать команду удаления, которую я не помню, но даже с ее помощью мои файлы все равно не будут сгенерированы. Так выглядит мой журнал, а ниже вы можете найти код для простого класса.

Я предполагаю, что это как-то связано с тем, что я меняю свою учетную запись github, поскольку упоминается проблема с разрешением.

Я использую код vs в Windows 10.

журнальный файл:

E:\1 Work\flutter_pilot> flutter pub run build_runner build
[INFO] Generating build script...
[INFO] Generating build script completed, took 336ms

[WARNING] Deleted previous snapshot due to missing asset graph.
[INFO] Creating build script snapshot......
[INFO] Creating build script snapshot... completed, took 12.5s

[INFO] Initializing inputs
[INFO] Building new asset graph...
[INFO] Building new asset graph completed, took 787ms

[INFO] Checking for unexpected pre-existing outputs....
[INFO] Found 13 declared outputs which already exist on disk. This is likely because the`.dart_tool/build` folder was deleted, or you are submitting generated files to your source repository.
[SEVERE] Conflicting outputs were detected and the build is unable to prompt for permission to remove them. These outputs must be removed manually or the build can be run with `--delete-conflicting-outputs`. The outputs are: lib/models/advisory-service-item.g.dart
lib/models/advisory-service.g.dart
lib/models/auth.g.dart
lib/models/contract.g.dart
lib/models/contributor.g.dart
lib/models/exact-cost-values.g.dart
lib/models/exact-cost.g.dart
lib/models/expert.g.dart
lib/models/paginator-info.g.dart
lib/models/person.g.dart
lib/models/project.g.dart
lib/models/system-country.g.dart
lib/models/user.g.dart
pub failed (78)

файл класса:

import 'package:json_annotation/json_annotation.dart';
part 'organisation.g.dart';

@JsonSerializable()
class Organisation {
  final String name;
  Organisation({this.name});

  factory Organisation.fromJson(Map<String, dynamic> json) => _$OrganisationFromJson(json);

  Map<String, dynamic> toJson() => _$OrganisationToJson(this);
}

21 ответ

Решение

У меня была аналогичная проблема, но я использую Android Studio IDE и выполнил следующий шаг:

Файл => Недействительные кеши / перезагрузка

Выполните следующую команду:

flutter clean

flutter pub get

flutter packages pub run build_runner build --delete-conflicting-outputs  

Вы просто запустите следующий код ..

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

Если вы внимательно прочитаете сообщение об ошибке, вы увидите, что оно просит вас попробовать добавить --delete-conflicting-outputsв конце вашей команды. Так что тебе стоит попробоватьflutter packages pub run build_runner build --delete-conflicting-outputs.

В моем случае добавление part 'file_name.g.dart'; в начало файла помогло.

имя_файла.dart:

import 'package:json_annotation/json_annotation.dart';

part 'file_name.g.dart';

@JsonSerializable()
class YourClass {

    factory YourClass.fromJson(Map<String, dynamic> json) => _$YourClassFromJson(json);

    Map<String, dynamic> toJson() => _$YourClassToJson(this);

    // ... your class code
}

Я была такая же проблема. Решено с помощью следующей команды

пакеты флаттера pub run build_runner build --delete-конфликтующие выходы

изменение части и класса на то же имя файла устранило проблему со мной

Я думаю, что основная причина, по которой это происходит с большинством из нас, заключается в том, что, когда вы запускали эту команду раньше, вы добавляли сгенерированный файл в систему управления версиями. это, в свою очередь, предотвращает build_runnerот восстановления ранее сгенерированных файлов, что он и делает, даже если вам нужен только новый файл. Теперь я понимаю, что это может быть трудно понять, но учтите следующее:

  1. скажем, у вас есть search_entry.dart файл.
  2. вы выполнили команду и успешно сгенерировали файл.
  3. Затем вы переходите к добавлению сгенерированного файла в репозиторий системы управления версиями.
  4. вы делаете другой файл, допустим, возможно.
  5. когда вы запускаете команду во второй раз, чтобы сгенерировать, она попытается удалить файл, чтобы восстановить его вместе с cached_data_entry.dart файл.
  6. поскольку он защищен системой управления версиями, исполнитель сборки не сможет удалить его, поэтому он выдает эту ошибку.
  7. Теперь, что вам нужно сделать, чтобы исправить текущую ситуацию, это удалить ранее все ранее сгенерированные g.dart файлы, ( search_entry.g.dart в нашем примере), затем добавьте его к игнорируемым файлам в .gitignoreфайл в исходном элементе управления. затем запустите команду еще раз, и, надеюсь, на этот раз у вас все получится.
  8. в будущем вам следует игнорировать эти файлы из системы управления версиями сразу после их создания.

Теперь, наконец, я надеюсь, что я прояснил это так, как должно быть.

Проблема связана с зависимостью пакета, выполнение этогоflutter pub upgrade --major-versionsсделает дело.

Запуск "обновления паба флаттера" решил проблему для меня.

Я была такая же проблема. Сначала я создал файл myFirstGeneratedFile.g.dart, затем мне понадобился другой тип объекта для хранения, а затем, когда я попытался сгенерировать файл с помощью этой команды =>

flutter packages pub run build_runner clean

Я получил сообщение об ошибке.

Я исправил это, удалив файл, который я создал до => myFirstGeneratedFile.g.dart, а затем снова запустил команду.

Ура!

попробуйте что-то вроде этого через терминал:

  1. Удалите ранее сгенерированные файлы с помощью команды: find ./ -name '*.g.dart' -delete
  2. затем: флаттер-пакеты pub run build_runner watch --delete-conflicting-outputs

В моем случае процесс build_runner прошел успешно, но файлы .g не были созданы. Мне пришлось перезапустить IDE (vscode), прежде чем я увидел файлы .g.

в моем случае я забыл импортировать пакет mobx_codegen

В моем случае я объявил файл дротика с именем Organisation.dart вместо строчной буквы organisation.dart, преломление этого и повторный запуск сборщика снова сработали для меня.

Удалять .dart_tool папку и запустить flutter pub get. После этого запустите команду build runner

Добавьте встроенный_значение_генератор в pubspec.yamlк dev_dependenciesраздел https://pub.dev/packages/built_value_generator

Вы можете прочитать официальную документацию - https://dart.dev/tools/build_runner

Добавьте этот файл в корневой каталог с помощьюpubspec.yaml

build.yamlфайл

Добавьте следующие строки

      targets:
  $default:
    builders:
      freezed:
        options:
          any_map: true
          explicit_to_json: true

Затем запустите

      flutter clean
flutter pub get
flutter packages pub run build_runner build --delete-conflicting-outputs 
      ../../../.pub-cache/hosted/pub.dev/build_runner-2.2.0/lib/src/build_script_generate/bootstrap.dart:76:40: Error: Method not found: 'NullThrownError'.
      final error = e[0] as Object? ?? NullThrownError();

В моем случае простое обновление всех пакетов до последней версии решило проблему.

      dependencies:
  freezed: ^2.4.2
  freezed_annotation: ^2.4.1
  json_serializable: ^6.7.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.6

устарел. Использоватьвместо.

Проверь это:

      part 'organisation.g.dart';

он должен иметь то же имя, что и файл.

Убедитесь, что этоtargetsбит входит вbuild.yamlи НЕ pubspec.yaml.

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