如何循环遍历文件列表以写入本地存储?

问题描述 投票:0回答:2
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中有没有特定的函数可以将多个文件写入本地存储?

android flutter dart mobile google-cloud-storage
2个回答
1
投票

因为您正在使用

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);
                  }
            }
            }

0
投票

没有特定的函数可以将多个 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

© www.soinside.com 2019 - 2024. All rights reserved.