我需要得到transformphotos函数的结果,它应该给我一个base64中的图像列表(它是这样的),但是当我在下一个函数中得到它时,它抛出[]

Future<List<String>> transformPhotos() async {
  List<String> imagesToBase64 = [];
  if (_images.length > 0) {
    _images.forEach((File imageFile) async {
      imagesToBase64.add(await utils.imageToBase64(imageFile));
    });
  }
  return imagesToBase64;
}

Future<void> uploadPhotos() async {
  transformPhotos().then((onValue) {
    print(onValue); //throws []
  });
}


我希望得到如下结果:[String, String, String]
非常感谢!

最佳答案

填充列表的代码是异步的:imagesToBase64.add(await utils.imageToBase64(imageFile));
但是您返回列表时不需要等待异步计算完成。基本上,return imagesToBase64;在添加任何值之前被调用,因此是空的。尝试这种方法:

return Future.forEach(_images, (File imageFile) async {
  imagesToBase64.add(await utils.imageToBase64(imageFile));
}).then((_) => imagesToBase64);

10-06 16:20