Предположим, что у вас есть строка в активах / изображениях и текстовый файл с кодировкой 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
, но это, кажется, деталь реализации, поэтому, возможно, может быть изменена.