Flutter Как хранить и получать доступ к файлам с помощью AssetBundle

EDIT: Этот вопрос касается использования AssetBundle, в то время как этот вопрос ( Список файлов в флаттер ) касался использования Directory. Они разные из-за разных классов. ТАКЖЕ: я удалил один раздел, который может быть похож на предыдущий вопрос.

Я не понимаю, как использовать AssetBundle для доступа к файлам ...

Например, мои активы в pubspec.yaml

assets:
- assets/images/
- assets/texts/
  1. У AssetBundle есть методы: loadclock.png (distances.json, ...) и ключ (ключ, ...) - что такое ключ и как использовать эти методы?

  2. Мне нужно загрузить данные из текстовых файлов и других файлов. Я знаю, что есть rootBundle (или DefaultAssetBundle.of (context)) ... Но как его использовать для загрузки файлов ?!

Благодаря!

android,dart,flutter,

1

Ответов: 1


1 принят

Предположим, что у вас есть строка в активах / изображениях и текстовый файл с кодировкой UTF-8 в активах / текстах.String distancesText = await rootBundle.loadString('assets/texts/distances.json'); Map distances = json.decode(distancesText);loadString

На keyсамом деле это просто путь к активу, поэтому вы можете загрузить весь файл в виде a Stringи декодировать json следующим образом:

loadStructuredData

loadString позаботится об декоде UTF-8 для вас, а также кэширует строку для более быстрого доступа в следующий раз.

loadStructuredDataделает еще один шаг - он загружает строку, а затем вызывает предоставленный вами обратный вызов для синтаксического анализа строки и возвращает результат. На этот раз он кэширует декодированный результат - теперь сохраняет шаг чтения и декодирования в следующий раз.Map distances2 = await rootBundle .loadStructuredData('assets/texts/distances.json', (String s) async { return json.decode(s); });

ByteData clockData = await rootBundle.load('assets/images/clock.png');
Uint8List clockBytes = clockData.buffer.asUint8List());

Таким образом, это отлично подходит для текстовых файлов; как насчет бинарных файлов? Вы можете прочитать весь актив как массив байтов.

Image

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

Конечно, для PNG вы, скорее всего, не прочитали бы его как байты, а вместо этого загрузили бы его как Imageвиджет AssetImage. (Также изображения объектов должны иметь несколько разрешений для разных устройств DPI.) См. Активы и изображения .

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

андроид, дротик, флаттер,
Похожие вопросы
Яндекс.Метрика