首页 > 解决方案 > Flutter 如何从一个 List 中的 assets 文件夹中获取所有文件

问题描述

我在 assets 文件夹中有一堆 xml 文件,我添加了 pubspec.yaml 的路径,路径看起来像这样 'assets/data/somename.xml' 我需要从它们那里获取数据,这就是我现在得到它的方式

List filePathList = ['assets/data/widow.xml','assets/data/door.xml'];
    for(int i = 0;i<filePathList.length;i++){
      var xmlFile =  XmlDocument.parse(await rootBundle.loadString(filePathList[i]));
      checkListtemplateXmlList.add(xmlFile);
}

你怎么能看到我使用非常糟糕的方式从文件中获取数据,将来会有更多的 xml 文件,所以我需要一些解决方案来解决这个问题,以便不在资产文件夹中的每个文件的 filePathList 中添加路径。我还做了一个 loadData 函数来加载我想要的所有文件,但是我的 json 文件位于我使用 getApplicationDocumentDirectory 类获得的目录中。有一个代码

static Future<void>  loadData() async {
    final dir = await getApplicationDocumentsDirectory();
    List<FileSystemEntity> files = await dir.list().toList();
    for (int i = 0; i < files.length; i++) {
      String filepath = files[i].path;
      File newFile = File(filepath);
      String name = p.basenameWithoutExtension(newFile.path);
      String myExtension = p.extension(filepath);
      if(myExtension != '.json'){
      } else{
        checkLists.add(CheckList(name));
      }
    }
    for(int i = 0;i< checkLists.length;i++){
      await checkLists[i].readFile();
    }
  }

我怎么能在我的 getXmlData 函数中做这样的事情

标签: flutterdart

解决方案


在 pubspec 中只定义文件夹:

assets:
 - assets/data/

这将“加载”文件data夹内的所有文件。

并使用此代码:

// This will give a list of all files inside the `assets`.
var assets = await rootBundle.loadString('AssetManifest.json');

并使用过滤器获取所有xml文件。

Map json = json.decode(assets);
List get = json.keys.where((element) => element.endsWith(".xml")).toList();

推荐阅读