如何在flutter中手动添加包含所需数据的文件夹



我正在flutter中进行一个测验项目。我根据测验类别将测验文本文件存储在文件夹中。所有这些文件夹都存储在一个根文件夹中。所以我应该能够列出这个根文件夹中的所有文件夹(它们是类别(。打开类别文件夹时,应列出相应文件夹中的文件。

目标是用每个文件夹的名称制作按钮,按钮将保持打开该文件夹的路径。

即,如果用户单击文件夹的按钮,将生成一个列表,其中包含所单击文件夹中文件夹的名称,并根据该列表生成按钮的列表视图。最后,当您打开包含测验文件的文件夹时,会发生同样的情况,但按钮将包含相应的文件路径。

我已经制作了文件夹树和功能,根据列表中存储的名称制作按钮。但我不知道该把这个文件夹放在项目的哪个地方。

我试过在项目的根目录、Lib文件夹和资产文件夹中推杆,但flutter无法检测到这个目录。

我真的需要这个来推动我的项目。如有任何建议,我们将不胜感激。

要做到这一点,您需要多件事:

  1. 查看flutter中的文件夹和文本文件
  2. 列出您的文件夹和文本文件
  3. 正在读取文本文件

1-查看flutter中的文件夹和文本文件

由于资产符号不支持递归,您必须:

  • 手写所有内容
  • 使用插件为您生成资产

由于您有很多文件,我认为第二个选项最适合您。我确实很难找到一个有效的,但根据我的测试,FlutterAssetSync运行得很好。唯一的限制是你必须把所有的东西都放在";资产";文件夹(这实际上不是一个约束tbh(。

将文件放入assets文件夹后,执行插件(在Tools>FlutterAssetSync下(。这将自动将所有内容添加到您的pubspec.yaml

2-列出您的文件夹和文本文件

为了获得文件夹和文本文件的名称,您可以使用这个stackoverflow问题的答案。基本上这里是实现:

Future<List> _getImages(String folderName) async {
final manifestContent = await rootBundle.loadString('AssetManifest.json');
final Map<String, dynamic> manifestMap = json.decode(manifestContent);
return manifestMap.keys
.where((String key) => key.contains(folderPath))
.toList();
}

3-阅读文本文件

要读取文本文件资产的内容,必须使用loadString(就像我们在_getImagesbtw中所做的那样(。以下是一个快速实现:

Future<String> _getQuizzText(String quizzTextPath) async {
return await rootBundle.loadString(quizzTextPath);
}

把所有东西放在一起,你应该能够让它发挥作用!

最新更新