0

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.

CopsOnRoad
  • 237,138
  • 77
  • 654
  • 440
jdevp2
  • 371
  • 5
  • 15

1 Answers1

1

Since toByteData() returns a Future<ByteData?>, you should also return the same from your method. Try this:

Future<ByteData?> imgProvider2ByteData(ImageProvider img) async {
  var completer = Completer<ByteData?>();
  img.resolve(ImageConfiguration()).addListener(ImageStreamListener((ImageInfo info, bool _) {
    completer.complete(info.image.toByteData());
  }));
  return completer.future;
}
CopsOnRoad
  • 237,138
  • 77
  • 654
  • 440