如何将字符串转换为列表<Map <String,String >>

时间:2019-12-08 16:26:40

标签: flutter dart

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

  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": " "},


  ];

现在,我希望保存数据表中的数据。因此,我只是使用File 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>>?我完全不知道如何实现这一目标。非常感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

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

<p class="card-text">
    @{
        string x = item.Info.Length > 100 ? item.Info.Substring(0, 100) : item.Info;
        x = x.Length == 100 ? x + "..." : x;
    }
    @Html.Raw(x)
</p>

现在,您可以使用jsonDecode轻松加载数据:

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