Куда должны направляться ресурсы flutter из flutterappB, если приложение включено во flutterappA в виде пакета?

#flutter

#flutter

Вопрос:

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

Итак, FlutterAppA ссылается на FlutterAppB и включен в pubspec.yaml FlutterAppA. FlutterAppB включает изображение в свою папку ресурсов, объявленную в файле pubspec, и определяет виджет, который отображает этот ресурс. Я хочу получить доступ к этому виджету из B (отображение виджета с активом)

B’s pubspec

 flutter:
  assets:
    - assets/smile.gif
  

A’s pubspec

 dependencies:
  flutter:
    sdk: flutter
  flutter_app_b:
    path: ../flutter_app_b/
  

Когда B запускается самостоятельно, отображается изображение.

 class MyApp extends StatelessWidget {
  Widget build(BuildContext context) => MaterialApp(
          home: SmileAssetImage());
}
class SmileAssetImage extends StatelessWidget {
  Widget build(BuildContext context) => Image.asset('assets/smile.gif');
}
  

однако при обращении к нему во FlutterAppA он не может найти ресурс и выдается исключение «невозможно загрузить ресурс».

Находится ли ресурс в правильном месте, должен ли он находиться в обеих папках ресурсов и / или в обеих папках pubspec?

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

1. в pubspec A добавьте assets: - ../flutter_app_b/assets/smile.gif

2. ах, я все еще получаю ошибку, pubspec компилируется, но я продолжаю получать ошибку во время выполнения, когда A пытается отобразить виджет в B (исключение «актив не может загрузить»). Если я удалю ресурс из B и включу его обычным способом в A, он отобразится в A, но, конечно, он больше не работает в B!

3. хм, теперь я, похоже, не могу заставить что-либо работать во flutter_app_b (после очистки flutter тоже)

Ответ №1:

Верно, похоже, что активы должны быть включены и объявлены в любом приложении, которое фактически запущено (если запущено A, то активы должны быть определены в приложении A, если запущено B, то активы должны быть в приложении B). flutter clean Команда казалась необходимой

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

1. если оба проекта находятся в одном каталоге, вы можете сохранить ресурс в этом каталоге и использовать как: ../smile.gif