我正在尝试在Flutter中向Sembast数据库插入用户列表。但这不起作用-我总是收到以下错误:
Exception has occurred.
_TypeError (type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>')
只需添加一个用户-对我有用。我只是在添加用户列表时遇到问题。
Future insertAll(List<Users> users) async {
print(jsonEncode(users));
await _usersStore.addAll(
await _db, jsonDecode(jsonEncode(users)));
}
打印输出给我以下内容:[{“ id”:“ f20ce2fb-d0db-11e9-9e8b-06ba1e206a58”,“名称”:“ Max”,“ lastName”:“ Mustermann”}]
答案 0 :(得分:0)
如果使用一次foreach一次插入一个怎么办?
我知道这可能不是您要寻找的东西,但这是一种持续工作直到找到解决方法的方法!
Future insertAll(List<Users> users) async {
print(jsonEncode(users));
users.foreach((user) async{
// insert here
});
}
答案 1 :(得分:0)
1-您可以重新输入User
类,因为您的错误是因为Users
被键入为List<dynamic>
,并且您正在传递和映射。
2-您可以在User
类中添加一个字段:List<Map<dynamic, dynamic>>
或仅使用.add()
方法。
我强烈建议使用.add()
答案 2 :(得分:0)
我认为问题在于jsonDecode不是预期的类型。您应该考虑使用以下函数进行投射:
/// This properly cast a decoded json list of object
List<Map<String, dynamic>> asMapList(dynamic list) {
return (list as List)?.cast<Map<String, dynamic>>();
}
这样的简单测试应该可以工作(假设db是一个打开的数据库):
test('jsonDecode', () async {
var store = intMapStoreFactory.store();
var list = [
{'test': 'value'}
];
var toAdd = jsonDecode(jsonEncode(list));
try {
// This fails
await store.addAll(db, toAdd);
fail('should fail');
} catch (e) {
expect(e, isNot(const TypeMatcher<TestFailure>()));
print(e);
}
// This works!
await store.addAll(db, asMapList(toAdd));
});