load method

  1. @override
Future<ByteData> load(
  1. String key
)
override

Retrieve a binary resource from the asset bundle as a data stream.

Throws an exception if the asset is not found.

The returned ByteData can be converted to a Uint8List (a list of bytes) using Uint8List.sublistView. Lists of bytes can be used with APIs that accept Uint8List objects, such as decodeImageFromList, as well as any API that accepts a List<int>, such as File.writeAsBytes or Utf8Codec.decode (accessible via utf8).

Implementation

@override
Future<ByteData> load(String key) {
  final Uint8List encoded = utf8.encode(Uri(path: Uri.encodeFull(key)).path);
  final Future<ByteData>? future = ServicesBinding.instance.defaultBinaryMessenger.send(
    'flutter/assets',
    ByteData.sublistView(encoded),
  )?.then((ByteData? asset) {
    if (asset == null) {
      throw FlutterError.fromParts(<DiagnosticsNode>[
        _errorSummaryWithKey(key),
        ErrorDescription('The asset does not exist or has empty data.'),
      ]);
    }
    return asset;
  });
  if (future == null) {
    throw FlutterError.fromParts(<DiagnosticsNode>[
      _errorSummaryWithKey(key),
      ErrorDescription('The asset does not exist or has empty data.'),
    ]);
  }
  return future;
}