函数返回空列表而不是 List<String> [重复]
Posted
技术标签:
【中文标题】函数返回空列表而不是 List<String> [重复]【英文标题】:Function returning empty list instead of List<String> [duplicate] 【发布时间】:2021-10-07 07:07:48 【问题描述】:我有一个函数接受 List<File>
并通过将文件上传到 firebase 存储返回 Urls(List<String>)
列表。
文件正在上传到存储中,并且正在为单个上传生成 URL(使用打印语句检查)。
但是当我尝试将此 URL 添加到列表中并返回列表时,该函数始终返回一个空列表。 这是我的功能:
Future<List<String>> uploadImages(List<File> imageFiles) async
List<String> imageUrlList = [];
imageFiles.forEach((File imageFile) async
final ref = FirebaseStorage.instance
.ref('/tempImages')
.child('$DateTime.now().toString()image.jpg');
await ref.putFile(imageFile);
final url = await ref.getDownloadURL();
print(url);
imageUrlList.insert(0, url);
);
print(imageUrlList);
return imageUrlList;
第二个打印语句甚至没有打印到调试控制台。 有人可以帮我吗?
【问题讨论】:
不是list.add()
吗?
@sittsering list.add(...)
将添加到末尾,list.insert(0, ...)
添加到前面。
@sittsering list.add()
不是问题所在。不处理异步/等待行为
好的,明白了
【参考方案1】:
forEach
不会像你想象的那样工作。在 forEach 完成它的操作之前到达第二个打印语句。
您必须使用传统的for
循环才能使事情正常进行。如下所示。
Future<List<String>> uploadImages(List<File> imageFiles) async
List<String> imageUrlList = [];
for(var i=0; i<imageFiles.length; i++)
var imageFile = imageFiles[i];
final ref = FirebaseStorage.instance
.ref('/tempImages')
.child('$DateTime.now().toString()image.jpg');
await ref.putFile(imageFile);
final url = await ref.getDownloadURL();
imageUrlList.insert(0, url);
print(imageUrlList);
return imageUrlList;
它在 forEach 上不起作用的原因是,该语句只是一个函数调用。对数组方法的函数调用。所以解释器调用它并移动到下一行,即打印,然后返回。所以此时,那些图片文件还没有上传。
【讨论】:
以上是关于函数返回空列表而不是 List<String> [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate query.list() 方法返回空列表而不是空值
为啥使用 null 函数而不是 == [] 来检查 Haskell 中的空列表?
string.split 返回一个字符串 [] 我想要一个 List<string> 是不是有一个内衬可以将数组转换为列表?