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;
}