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