Как правильно импортировать пользовательские пакеты генерации исходного кода

#flutter #dart #sourcegenerators

Вопрос:

Я пытаюсь использовать пакет генерации исходного кода, который я написал сам и назвал animated_widget_generator . вызывается пакет аннотаций animated_widget_annotations и вызывается приложение, для которого я пытаюсь его использовать example_usage .

Я добавил необходимые пакеты в свой dev_dependencies . вот мой pubspec.yaml :

 name: example_usage
description: A new Flutter project.

publish_to: 'none'

version: 1.0.0 1

environment:
  sdk: ">=2.12.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2

dev_dependencies:
  flutter_test:
    sdk: flutter
  animated_widget_generator:
    path: ../animated_widget_generator
  animated_widget_annotations:
    path: ../animated_widget_annotations
  build_runner: ^2.0.4

flutter:
  uses-material-design: true

 

но когда я пытаюсь запустить приложение на своем телефоне, оно выдает мне следующие ошибки:

 Launching libmain.dart on ONEPLUS A6003 in debug mode...
√ Built buildappoutputsflutter-apkapp-debug.apk.
E/flutter (17052): [ERROR:flutter/shell/common/shell.cc(242)] Dart Error: error: import of dart:mirrors is not supported in the current Dart runtime
E/flutter (17052): [ERROR:flutter/runtime/dart_isolate.cc(169)] Could not prepare isolate.
E/flutter (17052): [ERROR:flutter/runtime/runtime_controller.cc(401)] Could not create root isolate.
E/flutter (17052): [ERROR:flutter/shell/common/shell.cc(571)] Could not launch engine with configuration.
Exited (1)
 

есть и другие вопросы по переполнению стека об этой ошибке, но они всегда касаются какого-либо стороннего пакета, а не пользовательского пакета генерации исходного кода, и мне кажется, что ни один из ответов на эти вопросы не имеет отношения ко мне

РЕДАКТИРОВАТЬ: pubspec.yaml для animated_widget_generator и animated_widget_annotations :

 name: animated_widget_annotations
description: A new Flutter package project.
version: 0.0.1
author:
homepage:

environment:
  sdk: ">=2.12.0 <3.0.0"
  flutter: ">=1.17.0"

dependencies:
  flutter:
    sdk: flutter

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:

 
 name: animated_widget_generator
description: A new Flutter package project.
version: 0.0.1
author:
homepage:

environment:
  sdk: ">=2.12.0 <3.0.0"
  flutter: ">=1.17.0"

dependencies:
  flutter:
    sdk: flutter
  path: ^1.8.0
  source_gen: ^1.0.2
  json_serializable: ^4.1.3
  animated_widget_annotations:
    path: ../animated_widget_annotations

dev_dependencies:
  flutter_test:
    sdk: flutter
  pedantic: ^1.11.0
  build_runner: ^2.0.4

flutter:

 

Ответ №1:

Вы получаете эту ошибку, потому что пакет dart:mirrors пакета недоступен с flutter.

Проверьте эти разговоры в группах Google и на github для получения дополнительной информации.

Альтернативный пакет под названием reflectable доступен для отражения, однако в настоящее время он имеет ограничения.

Комментарии:

1. Я не импортировал пакет dart:mirrors в свое приложение! как я могу заставить flutter избегать включения пакета в мое приложение, чтобы оно не приводило к этой ошибке?

2. Ну, если вы не импортировали напрямую, вы уже выполнили свою работу, может быть, по пути в одном из других пакетов animated_widget_generator или animated_widget_annotations он был импортирован?

3. я понимаю, что эти пакеты являются только зависимостью от разработчиков и поэтому должны иметь возможность импортировать все, что они хотят.

4. Верно. Но трудно сказать, почему он не работает, не видя кода для генераторов.

5. Я также добавил pubspec.yaml для генератора. помогает ли это прояснить проблему?

Ответ №2:

Это очень распространенная проблема с будущими разработчиками flutter. Основная причина в том, что флаттер и дарт быстро обновляются. Иногда после их обновления, скажем, после этой последней версии Flutter 2.2, вы можете видеть на их github, что некоторые пакеты удаляются из стабильного режима, чтобы работать над ними, чтобы сделать их более эффективными. Таким образом, вы не можете получить доступ к этим пакетам. Убедитесь, что вы либо нашли альтернативный пакет для той же задачи, либо попытались изменить номер версии зависимости на меньшее число, что может сработать из-за обратной совместимости. pubspec.yaml может быть очень трудно понять, если у вас проблема с версией, потому что он сообщит вам, что зависимости не существует, но не сообщит вам причину.

Комментарии:

1. похоже, что все пакеты, которые я использую, обновлены и совместимы с последней версией flutter, поэтому я не думаю, что в этом проблема