Проблема с зависимостями при добавлении пакета flutter интеграционного теста

#flutter #dart #flutter-dependencies #flutter-integration-test

Вопрос:

Я пытаюсь добавить следующий пакет в pubspec.yml:

интеграция_тест: ^1.0.1

И когда я выполняю flutter pub get команду, в выходном терминале выводится следующее:

 Because no versions of uuid match >3.0.4 <4.0.0 and uuid 3.0.4 depends on crypto ^3.0.0, uuid ^3.0.4 requires crypto ^3.0.0.


And because every version of integration_test depends on flutter_driver any from sdk which depends on crypto 2.1.5, uuid ^3.0.4 is incompatible with integration_test.
So, because BOTS depends on both uuid ^3.0.4 and integration_test ^1.0.1, version solving failed.
pub get failed (1; So, because BOTS depends on both uuid ^3.0.4 and integration_test ^1.0.1, version solving failed.)
exit code 1
 

Я попытался исправить это, добавив следующее в свой файл pubspec.yml:

 dependency_overrides:  
  crypto: ^3.0.0
  archive: ^3.0.0
  markdown: ^4.0.0
  args: ^2.0.0
 

Но не уверен, что это лучший подход. Когда я добавляю эти зависимости и переопределения в свой проект, я получаю исключение Java при выполнении :

 flutter run --release --flavor prod
 

Что выглядит как:

 E/AndroidRuntime(18685): java.lang.NoSuchMethodError: No interface method a()Ljava/lang/String; in class Landroid/content/res/XmlResourceParser; or its super classes (declaration of 'android.content.res.XmlResourceParser' appears in /system/framework/framework.jar)
E/AndroidRuntime(18685):        at androidx.core.content.FileProvider.parsePathStrategy()
E/AndroidRuntime(18685):        at androidx.core.content.FileProvider.getPathStrategy()
E/AndroidRuntime(18685):        at androidx.core.content.FileProvider.attachInfo()
E/AndroidRuntime(18685):        at android.app.ActivityThread.installProvider(ActivityThread.java:5852)
E/AndroidRuntime(18685):        at android.app.ActivityThread.installContentProviders(ActivityThread.java:5444)
E/AndroidRuntime(18685):        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5383)
E/AndroidRuntime(18685):        at android.app.ActivityThread.-wrap2(ActivityThread.java)
E/AndroidRuntime(18685):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1541)
E/AndroidRuntime(18685):        at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(18685):        at android.os.Looper.loop(Looper.java:154)
E/AndroidRuntime(18685):        at android.app.ActivityThread.main(ActivityThread.java:6123)
E/AndroidRuntime(18685):        at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(18685):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
E/AndroidRuntime(18685):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
 

И единственный способ не получить это исключение-удалить зависимость integration_test.

Как я могу правильно добавить эту зависимость ?

Ответ №1:

Сообщение говорит вам: uuid: ^3.0.4 и integration_test: ^1.0.1 несовместимы, потому что они зависят от разных версий одного и того же пакета.

Одним из решений является понижение версии uuid до тех пор, пока она не заработает, но если у вас есть другие пакеты, которые зависят от uuid транзитивности, они могут сломаться.

Другой способ-использовать прилагаемый integration_test пакет. Вы заметите , что на странице паба для integration_test , написано, что он устарел: https://pub.dev/packages/integration_test

Это связано с тем, что он был перенесен в SDK Flutter, учитывая, что теперь он является предпочтительным пакетом тестирования интеграции.

Чтобы использовать комплектную версию, вы должны включить ее в свой список dev_dependencies :

 integration_test:
  sdk: flutter
 

Однако прилагаемая версия все еще может быть несовместима с uuid: ^3.0.4 .

Чтобы исправить это, вам нужно будет убедиться, что вы находитесь на Flutter 2.2.X