используя фьючерсы с флаттером - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть этот код, который, как предполагается, l oop через изображения, чтобы загрузить их в firebase, затем взять их ссылки и поместить его в класс Product, чтобы продукт мог иметь ссылку на свои изображения. Затем загрузите продукт тоже. Проблема в том, что загрузка не дожидается вставки своих ссылок на продукт. Код

 List<String> imgUrls = [];
 Future<void> loopThroughMap()async{
_map.forEach((storedImage, inGallery) async {
  if (!inGallery && storedImage != null && storedImage.path != null) {
    await GallerySaver.saveImage(storedImage.path);
  }

  String urlString = await FirestoreHelper.uploadImage(storedImage);
  imgUrls.add(urlString);
});

}

Эта функция вызывается здесь

`
    await loopThroughMap();
    print('FINISHED THIS ONE, imgs Urls length ${imgUrls.length}');
    for (int i = 0; i < imgUrls.length; i++) {
    if (i == 0)
    _editedProduct.imageUrl = imgUrls[i];
    else if (i == 1)
    _editedProduct.imageUrl2 = imgUrls[i];
    else if (i == 2)
    _editedProduct.imageUrl3 = imgUrls[i];
    else if (i == 3) _editedProduct.imageUrl4 = imgUrls[i];
    }`

Длина списка imgUrls ВСЕГДА равна нулю. Может ли быть проблема с map.foreach?

1 Ответ

0 голосов
/ 24 февраля 2020

Хорошо, я изменил загрузку с ForEach l oop на a для l oop, и она отлично работает!

List<File> _listedImages = [];
  Future<void> loopThroughMap(){
    _map.forEach((storedImage, inGallery) async {
      if (!inGallery && storedImage != null && storedImage.path != null) {
        GallerySaver.saveImage(storedImage.path);
      }

      _listedImages.add(storedImage);
    });
  }

/////

for(var img in _listedImages){
              String url = await FirestoreHelper.uploadImage(img);
              imgUrls.add(url);
            }

После многих итераций единственной переменной, которая вызывала ошибку, была ForEach l oop.

...