You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 如何一次性获取assets文件夹下所有文件并存入List

解决方案

第一步:优化pubspec.yaml配置

首先你不需要逐个罗列xml文件路径,直接在pubspec.yaml的flutter/assets节点下配置文件夹路径即可,后续新增xml文件不需要再修改pubspec:

flutter:
  assets:
    - assets/data/

注意末尾要加斜杠,代表引用整个文件夹下的所有资源

第二步:实现批量读取assets下xml的getXmlData函数

assets属于应用打包内置的资源,不能用文件系统的File类读取,需要通过rootBundle配合AssetManifest获取所有资源路径后筛选处理,代码如下:

import 'package:flutter/services.dart';
import 'package:xml/xml.dart';
import 'package:path/path.dart' as p;

// 假设checkListtemplateXmlList是你定义的全局/类成员存储列表
List<XmlDocument> checkListtemplateXmlList = [];

static Future<void> getXmlData() async {
  // 加载资产清单,获取所有内置资源路径
  final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
  final allAssetPaths = assetManifest.listAssets();
  
  // 筛选出assets/data目录下的xml文件
  final xmlAssetPaths = allAssetPaths.where((path) {
    return path.startsWith('assets/data/') && p.extension(path) == '.xml';
  });

  // 逐个读取解析xml
  for (final xmlPath in xmlAssetPaths) {
    final xmlString = await rootBundle.loadString(xmlPath);
    final xmlFile = XmlDocument.parse(xmlString);
    checkListtemplateXmlList.add(xmlFile);
  }
}

注意事项

  • 每次新增xml文件后,需要重新执行flutter run才能加载新的资源,热重载不会更新资产清单
  • 如果需要获取xml的文件名,可以用p.basenameWithoutExtension(xmlPath)提取,和你之前处理json的逻辑一致

内容的提问来源于stack exchange,提问作者GDTyka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:51:02