Flutter将JSON数组保存到SharedPreferences

时间:2019-05-06 06:25:58

标签: flutter

如何将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);

```

2 个答案:

答案 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));
    }