我正在尝试将地图保存到本地文件中。
我有多个相互嵌套的地图。
我已经尝试使用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()上创建
希望您能帮助我。
答案 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