【问题标题】:Saving a map containg a list into a database in Flutter在 Flutter 中将包含列表的地图保存到数据库中
【发布时间】:2021-01-20 10:17:53
【问题描述】:

我正在寻找一种将Map<int, List<int>> 对象转换为字符串(反之亦然)的方法,以便能够使用 sqflite 将其保存到我的数据库中。

class ClassToBeSavedInDB {
  final String name;
  final Map<int, List<int>> listByIDs;
  ClassToBeSavedInDB({this.name, this.listByIDs});
  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'listByIDs': listByIDs, // TODO: convert this to a String
    };
  }
}

我尝试按照类似问题here 中的建议使用json.encode(map),但出现以下异常:

: Converting object to an encodable object failed: Instance of 'JsLinkedHashMap<int, List<int>>'Error: Converting object to an encodable object failed: Instance of 'JsLinkedHashMap<int, List<int>>'

更新

看起来 jsonDecode 不喜欢 int 键。使用Map&lt;String, List&lt;int&gt;&gt; 解决了这个问题。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以将地图转换为 JSON 并将其作为字符串放入数据库。

    【讨论】:

      【解决方案2】:

      我们首先需要将该对象转换为可以转换为 json 字符串的对象。

      在这种情况下,您可以先将映射解析为字符串,而不是仅使用 jsonEncode(listByIDs) ,以便将其转换为 json 成为有效。

      因此这样做:jsonEncode(listByIDs.toString()) .....这将解决问题。

      编辑:

      很抱歉最初的答案。所以正确的答案是使用一个名为 toEncodable 的回调。 答案如下:

      jsonEncode(map,toEncodable: (val){print("Encoded value : $val");return 1;});
      

      【讨论】:

      • 这样,jsonDecode 在从 db 读取值时会返回一个 String 而不是 Map。
      • @Marwén 我已经在解决方案中发布了正确的方法。请检查一下
      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 2020-10-10
      • 1970-01-01
      • 2020-11-26
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多