将地图保存到本地文件

时间:2020-10-13 09:31:10

标签: flutter dart

我正在尝试将地图保存到本地文件中。 我有多个相互嵌套的地图。 我已经尝试使用json.Encode(),但是收到错误JsonUnsupportedObjectError (Converting object to an encodable object failed: _LinkedHashMap len:9)

class _SecondScreenState extends State<SecondScreen> {
  Map week = new Map();
  final FachController = TextEditingController();
  final LehrerController = TextEditingController();
  Map feacher = new Map();

  List<Widget> makeList() {
    List days = ["Mo", "Di", "Mi", "Do", "Fr"];
    List st = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    readWeek();
    if (week.isEmpty) {
      for (var i in days) {
        week[i] = new Map();
        for (var b in st) {
          week[i][b] = {"F": "", "R": "", "L": "", "U": ""};
        }
      }
    }

    List rlist = new List<Widget>();
    rlist.add(createNoTouchTile("St."));
    for (var i in week.keys) {
      rlist.add(createNoTouchTile(i));
    }

    for (var i in st) {
      rlist.add(createNoTouchTile(i.toString() + "."));
      for (var b in week.keys) {
        rlist.add(createTouchTile(
          week[b][i]["F"],
          week[b][i]["R"],
          week[b][i]["L"],
          week[b][i]["U"],
          b,
          i,
        ));
      }
    }

    return rlist;
  }

  writeWeek() async {
    final directory = await getApplicationDocumentsDirectory();
    var path = directory.path;
    var ffile = File("$path/week.data");
    var war = json.encode(week);
    await ffile.writeAsString(war);
  }

  readWeek() async {
    final directory = await getApplicationDocumentsDirectory();
    var path = directory.path;
    var ffile = File("$path/week.data");
    var wekk = jsonDecode(await ffile.readAsString());
    print(wekk.runtimeType);
  }

  }
}

我试图在readWeek()和writeWeek()进行读写,而Map周在makeList()上创建

希望您能帮助我。

1 个答案:

答案 0 :(得分:0)

首先,您需要一个带有字符串键的映射,以便JSON可编码。

替换:

List st = [1, 2, 3, 4, 5, 6, 7, 8, 9];

具有:

List st = ["1", "2", "3", ...];

有关参考,请参见此处: https://api.dart.dev/stable/2.10.1/dart-convert/jsonEncode.html

相关问题