mirror of
https://github.com/rive-app/rive-flutter.git
synced 2025-06-23 07:18:17 +08:00
Add image decode listeners
This commit is contained in:
@ -12,6 +12,10 @@ class ImageAsset extends ImageAssetBase {
|
||||
ui.Image? _image;
|
||||
ui.Image? get image => _image;
|
||||
|
||||
/// A list of Images that need to know when the underlying bytes have been
|
||||
/// successfully decoded.
|
||||
List<Image>? _decodeListeners;
|
||||
|
||||
ImageAsset();
|
||||
|
||||
@visibleForTesting
|
||||
@ -22,12 +26,22 @@ class ImageAsset extends ImageAssetBase {
|
||||
_image = image;
|
||||
}
|
||||
|
||||
/// Registers [asset] to know when these image bytes have been decoded.
|
||||
void addDecodeListener(Image asset) {
|
||||
(_decodeListeners ??= []).add(asset);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> decode(Uint8List bytes) {
|
||||
final completer = Completer<void>();
|
||||
ui.decodeImageFromList(bytes, (value) {
|
||||
_image = value;
|
||||
completer.complete();
|
||||
|
||||
// Tell listeners that the image is ready to be drawn: mark them dirty.
|
||||
_decodeListeners
|
||||
?..forEach((e) => e.context.markNeedsAdvance())
|
||||
..clear();
|
||||
});
|
||||
return completer.future;
|
||||
}
|
||||
|
@ -37,8 +37,9 @@ class Image extends ImageBase
|
||||
|
||||
@override
|
||||
void draw(ui.Canvas canvas) {
|
||||
var uiImage = asset?.image;
|
||||
final uiImage = asset?.image;
|
||||
if (uiImage == null) {
|
||||
print('No image yet?! ${asset?.name} $uiImage');
|
||||
return;
|
||||
}
|
||||
bool clipped = clip(canvas);
|
||||
@ -84,7 +85,6 @@ class Image extends ImageBase
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@override
|
||||
int get assetIdPropertyKey => ImageBase.assetIdPropertyKey;
|
||||
|
||||
@ -100,6 +100,9 @@ class Image extends ImageBase
|
||||
void copy(covariant Image source) {
|
||||
super.copy(source);
|
||||
asset = source.asset;
|
||||
if (asset?.image == null) {
|
||||
asset?.addDecodeListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
Reference in New Issue
Block a user