Почему 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
от восстановления ранее сгенерированных файлов, что он и делает, даже если вам нужен только новый файл. Теперь я понимаю, что это может быть трудно понять, но учтите следующее:
- скажем, у вас есть
search_entry.dart
файл. - вы выполнили команду и успешно сгенерировали файл.
- Затем вы переходите к добавлению сгенерированного файла в репозиторий системы управления версиями.
- вы делаете другой файл, допустим, возможно.
- когда вы запускаете команду во второй раз, чтобы сгенерировать, она попытается удалить файл, чтобы восстановить его вместе с
cached_data_entry.dart
файл. - поскольку он защищен системой управления версиями, исполнитель сборки не сможет удалить его, поэтому он выдает эту ошибку.
- Теперь, что вам нужно сделать, чтобы исправить текущую ситуацию, это удалить ранее все ранее сгенерированные
g.dart
файлы, (search_entry.g.dart
в нашем примере), затем добавьте его к игнорируемым файлам в.gitignore
файл в исходном элементе управления. затем запустите команду еще раз, и, надеюсь, на этот раз у вас все получится. - в будущем вам следует игнорировать эти файлы из системы управления версиями сразу после их создания.
Теперь, наконец, я надеюсь, что я прояснил это так, как должно быть.
Проблема связана с зависимостью пакета, выполнение этогоflutter pub upgrade --major-versions
сделает дело.
Я была такая же проблема. Сначала я создал файл myFirstGeneratedFile.g.dart, затем мне понадобился другой тип объекта для хранения, а затем, когда я попытался сгенерировать файл с помощью этой команды =>
flutter packages pub run build_runner clean
Я получил сообщение об ошибке.
Я исправил это, удалив файл, который я создал до => myFirstGeneratedFile.g.dart, а затем снова запустил команду.
Ура!
попробуйте что-то вроде этого через терминал:
- Удалите ранее сгенерированные файлы с помощью команды: find ./ -name '*.g.dart' -delete
- затем: флаттер-пакеты pub run build_runner watch --delete-conflicting-outputs
В моем случае процесс build_runner прошел успешно, но файлы .g не были созданы. Мне пришлось перезапустить IDE (vscode), прежде чем я увидел файлы .g.
В моем случае я объявил файл дротика с именем 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
.