【问题标题】:Flutter Save JSON Array to SharedPreferencesFlutter 将 JSON 数组保存到 SharedPreferences
【发布时间】:2019-09-23 18:30:18
【问题描述】:

如何将 JSON 数组保存到 SharedPreferences 中?

我在下面尝试了一些类似这样的代码,但出现了一些错误:

[错误:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:类型 “文本”不是“字符串”类型的子类型

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);

【问题讨论】:

  • 用dynamicwidget[x].controller.text.toString()替换这个dynamicwidget[x].controller.text
  • 感谢您的回答,但仍然无法正常工作
  • 我认为问题只出在这一行
  • 而不是像这样将 order_count 值保存在变量中,然后在此处分配它

标签: arrays json flutter dart sharedpreferences


【解决方案1】:

我建议您使用类似this(本地存储实现)的东西,用于保存和加载 JSON。

从代码 sn-p 本身,我无法确切告诉您是什么导致了此异常,但基本上每个地方都会出现 String,但您提供了一个实际的 Text 小部件。它可能是categoryname 变量。你从dynamicWidget 实例中得到什么样的controller?你确定controller.text 返回一个String

另一个注意事项:您在每个 for 循环中重新分配 _listOrder,而不是添加信息。你必须使用一个空的array,它将被每个循环填充。

【讨论】:

  • 注意,谢谢参考
  • 这个库是遗留的,因为它不支持空安全
  • 从版本 4.0.0+1 开始,它已被设为 null 安全,因此可以照常使用
【解决方案2】:

感谢大家提供这个问题。 我已经解决了这个问题并进行了一些更改。

_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));
    }

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2011-08-20
    • 2011-10-26
    • 2017-04-25
    相关资源
    最近更新 更多