如何将JSON数组保存到SharedPreferences中?
我尝试了以下类似的代码,但出现了一些错误: [ERROR:flutter / lib / ui / ui_dart_state.cc(148)]未处理的异常:类型'Text'不是其子类型输入“字符串”
```
for (var x = 0; x < dynamicwidget.length - 1; x++) {
_listOrder={
"id_product": dataJSON[x]["product_id"],
"order_count": dynamicwidget[x].controller.text,
};
}
String json = jsonEncode(_listOrder);
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(categoryname, json);
```
答案 0 :(得分:0)
我建议您使用this(本地存储实现)之类的东西来保存和加载JSON。
根据代码片段本身,我无法确切地知道是什么导致了此异常,但是基本上到处都在期望String
的地方,但是您提供了一个实际的Text
小部件。它可能是categoryname
变量。您从controller
实例中得到哪种dynamicWidget
?您确定controller.text
返回String
吗?
另一个注意事项:您正在为每个for循环重新分配_listOrder
,而不是添加信息。您必须使用一个空的array
,该空位将充满每个循环。
答案 1 :(得分:0)
谢谢大家提出这个问题。 我已经解决了这个问题,并做了一些更改。
_listOrder.clear();
for (var x = 0; x < dynamicwidget.length; x++) {
int jml = int.parse(dynamicwidget[x].controller.text == ""? "0": dynamicwidget[x].controller.text);
if (jml > 0) {
_listOrder.add({
"id_product": dataJSON[x]["product_id"],
"order_count": dynamicwidget[x].controller.text,
});
}
}
if (_listOrder.length > 0) {
SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, dynamic> _collOrder = Map<String, dynamic>();
String sessjson = prefs.getString("orderlist");
if (sessjson != null) {
_collOrder = json.decode(sessjson);
_collOrder.remove(categoryname);
}
_collOrder[categoryname] = _listOrder;
prefs.setString("orderlist", json.encode(_collOrder));
}