【问题标题】:Problem with filling the list after await command等待命令后填写列表的问题
【发布时间】:2022-01-14 16:10:29
【问题描述】:

我刚刚开始使用 Flutter,但我被困在了一个点上。下面是我的功能的一部分,它首先将提供的图片上传到 firebase 存储,然后获取它们的可下载 URL 并将它们存储在字符串列表中。它应该使用从命令list.add(imageUrl); 获得的 URL 列表将数据上传到 Firestore

List<String> list = [];
imgList.forEach((element) async {
  final String filePath = element.path;
  final res =
      filePath.substring(filePath.lastIndexOf('im'), filePath.length);
  
  final ref = FirebaseStorage.instance.ref().child('images').child(res);
  await ref.putFile(File(element.path));
  final imageUrl = await ref.getDownloadURL();
  list.add(imageUrl);
});

final doc = FirebaseFirestore.instance.collection('cars').doc();

但它不会发生,因为在填充 list 之前调用了以下行,因为等待。

await doc.set({
'id': doc,
'img': list,
'price': 14450,
'make': 'Toyota',
'year': 2015`
});

【问题讨论】:

    标签: flutter asynchronous google-cloud-firestore


    【解决方案1】:

    在 imgList.forEach 之前添加等待

    List<String> list = [];
    await imgList.forEach((element) async {
      final String filePath = element.path;
      final res =
          filePath.substring(filePath.lastIndexOf('im'), filePath.length);
      
      final ref = FirebaseStorage.instance.ref().child('images').child(res);
      await ref.putFile(File(element.path));
      final imageUrl = await ref.getDownloadURL();
      list.add(imageUrl);
    });
    
    final doc = FirebaseFirestore.instance.collection('cars').doc();
    

    编辑

    如果这不起作用,那么您可以使用 for 循环而不是 forEach 之类的

    List<String> list = [];
        for(var element in imgList) {
          final String filePath = element.path;
          final res =
              filePath.substring(filePath.lastIndexOf('im'), filePath.length);
          
          final ref = FirebaseStorage.instance.ref().child('images').child(res);
          await ref.putFile(File(element.path));
          final imageUrl = await ref.getDownloadURL();
          list.add(imageUrl);
        }
        
        final doc = FirebaseFirestore.instance.collection('cars').doc();
    

    【讨论】:

    • 它没有用。请问还有什么解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多