首页 > 解决方案 > 如何将字符串转换为列表>

问题描述

我有一个列表,其中包含几个键和值,然后将它们映射到要显示的 DataTable 中。

  List<Map<String, String>> listOfColumns = [
    {"Name": "John", "Number": "1", "State": " "},
    {"Name": "Brad", "Number": "2", "State": " "},
    {"Name": "Ryan", "Number": "3", "State": " "},
    {"Name": "Grant", "Number": "4", "State": " "},


  ];

现在,我希望保存数据表中的数据。所以我简单地使用文件 IO 系统创建了一个名为 _save() 和 _read() 的异步函数,在 _save() 中我将 listOfColumns 转换为字符串。

_read() async {
    try {
      final directory = await  getExternalStorageDirectory();
      final file = File('${directory.path}/my_file.txt');


      text = await file.readAsString();

    } catch (e) {
      print("Couldn't read file");
    }
  }

  _save() async {
    final directory = await  getExternalStorageDirectory();
    final file = File('${directory.path}/my_file.txt');
    final List<Map<String, String>> data = listOfColumns;
    await file.writeAsString(data.toString());
    print('saved');

  }

现在,当涉及到从文件中读取数据时,事情是这样的——我实际上如何将变量文本转换回List<Map<String,String>>?我完全不知道如何实现这一目标。非常感谢任何帮助。谢谢。

标签: flutterdart

解决方案


您实际上应该首先将其保存为JSON(使用jsonEncode然后您可以轻松地将其转换回来:

Future<void> _save() async {
  ...
  final jsonString = jsonEncode(listOfColumns);
  await file.writeAsString(jsonString);
}

现在,您可以使用以下方法轻松加载数据jsonDecode

Future<void> _read() async {
  ...
  final decoded = jsonDecode(await file.readAsString()) as List;
  listOfColumns = decoded.cast<Map<String, dynamic>>()
       .map((map) => map.cast<String, String>()).toList();
}

推荐阅读