Flutter Sembast AddAll

时间:2019-09-27 18:33:58

标签: database flutter dart flutter-dependencies

我正在尝试在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”}]

3 个答案:

答案 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));
});