Future<void> downloadFiles(url) async {
var result = await getDirectories(url); //this function just returns the path in firestore storage
Directory appDocDir = await getApplicationDocumentsDirectory();
result.items.forEach((firebase_storage.Reference ref) async {
File downloadToFile = File('${appDocDir.path}/notes/${ref.name}');
try {
await firebase_storage.FirebaseStorage.instance
.ref(ref.fullPath)
.writeToFile(downloadToFile);
} on firebase_core.FirebaseException catch (e) {
print(e);
}
});
}
我在 flutter 中创建了这个函数来循环遍历我的 firebase 云存储中的文件。我曾尝试使用单个文件写入本地存储,它可以工作,但是当我循环遍历文件列表以写入本地存储时,它不起作用,它甚至不会产生错误,代码只是停止在“foreach” “它甚至不执行 try catch 块。 flutter中有没有特定的函数可以将多个文件写入本地存储?
因为您正在使用
forEach
循环,所以您必须对代码使用 for
循环,如下所示,它将起作用。
异步方法在
forEach
循环中不起作用
Future<void> downloadFiles(url) async {
var result = await getDirectories(url); //this function just returns the path in firestore storage
Directory appDocDir = await getApplicationDocumentsDirectory();
for(int i = 0; i<result.items.length ; i++){
File downloadToFile = File('${appDocDir.path}/notes/${result.item[i].name}');
try {
await firebase_storage.FirebaseStorage.instance
.ref(ref.fullPath)
.writeToFile(downloadToFile);
} on firebase_core.FirebaseException catch (e) {
print(e);
}
}
}
没有特定的函数可以将多个 FirebaseStorage 文件写入本地存储;但是,您可以使用
Future.forEach()
方法迭代存储引用并下载每个文件。
使用
result.items.forEach
不适用于异步回调。
import 'package:firebase_storage/firebase_storage.dart';
Future<void> downloadFiles(url) async {
final Directory appDocDir = await getApplicationDocumentsDirectory();
final ListResult result = await getDirectories(url); // Your function to get list of References
// Use Future.forEach for asynchronous operations
await Future.forEach(result.items, (Reference ref) async {
final File downloadToFile = File('${appDocDir.absolute}/notes/${ref.name}');
try {
// You can call writeToFile() directly on the Reference object
await ref.writeToFile(downloadToFile);
} on firebase_core.FirebaseException catch (e) {
print(e);
}
}
);
这假设您的
getDirectories(url)
函数返回一个 ListResult
。您可以参阅文档,了解有关如何从 FirebaseStorage 列出文件的更多信息:https://firebase.google.com/docs/storage/flutter/list-files。