flutter - 将包含列表的地图保存到 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>>
解决了这个问题。
解决方案
我们首先需要将该对象转换为可以转换为 json 字符串的对象。
在这种情况下,您可以先将映射解析为字符串,而不是仅使用 jsonEncode(listByIDs) ,以便将其转换为 json 变得有效。
因此这样做: jsonEncode(listByIDs.toString()) .....这将解决问题。
编辑 :
很抱歉最初的答案。所以正确的答案是使用一个名为 toEncodable 的回调。以下是答案:
jsonEncode(map,toEncodable: (val){print("Encoded value : $val");return 1;});
推荐阅读
- c# - 更新mysql值C#后连接错误
- node.js - 使用 Nodemailer 发送多封电子邮件时出现问题 - 主题未更改
- asp.net-mvc - Razor/MVC 空列表验证
- inno-setup - Inno Setup:[Run] 部分中的错误处理
- java - 我们如何在 Spring Boot 中使用任何一个验证?
- r - R中的相图
- c - 按下按钮时的处理
- c# - Asp.net MVC 与 Okta 的集成 - 在 SigninManager.SignIn 之后替换问题 Okta 声明
- react-native - 使用 ARCGIS 反应本机
- javascript - 在节点反应js中获取'SyntaxError:Unexpected identifier'