I'm trying to migrate to Null Safety in Flutter. The following code snippet to convert ImageProvider to ByteData works fine without Null Safety.
static Future<ByteData> imgProvider2ByteData(ImageProvider img) async {
Completer<ByteData> completer = new Completer<ByteData>();
img
.resolve(new ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
completer.complete(info.image.toByteData(format: ui.ImageByteFormat.png));
}));
return completer.future;
}
///pass ImageProvider to above function
ImageProvider provider=....
imgProvider2ByteData(provider).then((val) {
var data = val.buffer.asUint8List();
});
After enabling Null Safety, the function toByteData return Future<ByteData?> so I made the following changes (adding ? on type and ! on Future return value):
static Future<ByteData?> imgProvider2ByteData(ImageProvider img) async {
Completer<ByteData?> completer = new Completer<ByteData>();
img
.resolve(new ImageConfiguration())
.addListener(ImageStreamListener((ImageInfo info, bool _) {
completer.complete(info.image.toByteData(format: ui.ImageByteFormat.png));
}));
return completer.future;
}
/*pass ImageProvider to above function */
ImageProvider provider=....
imgProvider2ByteData(provider).then((val) {
var data = val!.buffer.asUint8List();
});
When I run it, I got the following error:
Exception caught by image resource service type 'Future<ByteData?>' is not a subtype of type 'FutureOr?' of 'value'
I must have done something wrong but can't figure how to use Null Safety on Future return value. Appreciate any help.