首页 > 解决方案 > 将包含列表的地图保存到 Flutter 中的数据库中

问题描述

我正在寻找一种将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
    };
  }
}

我尝试按照此处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<String, List<int>>解决了这个问题。

标签: flutterdart

解决方案


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

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

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

编辑 :

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

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

推荐阅读