Database 弗利特·森巴斯特·阿达尔酒店

Database 弗利特·森巴斯特·阿达尔酒店,database,flutter,dart,flutter-dependencies,Database,Flutter,Dart,Flutter Dependencies,我正在尝试将用户列表插入到Flatter中的Sembest数据库中。但这不起作用-我总是会遇到以下错误: Exception has occurred. _TypeError (type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>') 发生异常。 _TypeError(类型“List”不是类型“List”的子类型) 只需添加一个用户-对我来说很有用。我只是在添加用

我正在尝试将用户列表插入到Flatter中的Sembest数据库中。但这不起作用-我总是会遇到以下错误:

Exception has occurred.
_TypeError (type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>')
发生异常。 _TypeError(类型“List”不是类型“List”的子类型) 只需添加一个用户-对我来说很有用。我只是在添加用户列表时遇到了一个问题

Future insertAll(List<Users> users) async {
        print(jsonEncode(users));
        await _usersStore.addAll(
            await _db, jsonDecode(jsonEncode(users)));
      }
Future insertAll(列表用户)异步{
打印(JSONECODE(用户));
等待_usersStore.addAll(
等待数据库,JSONECODE(JSONECODE(用户));
}

打印的内容如下:[{“id”:“f20ce2fb-d0db-11e9-9e8b-06ba1e206a58”,“name”:“Max”,“lastName”:“Mustermann”}]

如果使用foreach并一次插入一个怎么办

我知道这可能不是你想要的,但这是一种持续工作的方法,直到你找到一种方法

Future insertAll(List<Users> users) async {
    print(jsonEncode(users));
    users.foreach((user) async{
      // insert here
    });

  }
Future insertAll(列表用户)异步{
打印(JSONECODE(用户));
foreach((用户)异步{
//在此插入
});
}

1-您可以重新键入您的
用户
类,因为您的错误是因为
用户
被键入为
列表
,并且您正在传递和映射

2-您可以在
用户
类:
列表

或者简单地使用
.add()
方法


我强烈建议使用
.add()

我认为问题在于jsonDecode不是预期的类型。你应该考虑使用一个函数,例如:

///这将正确地强制转换对象的解码json列表
列表asMapList(动态列表){
返回(列表为列表)?.cast();
}
这样一个简单的测试应该可以工作(假设db是一个开放的数据库):

test('jsonDecode',()异步{
var store=intMapStoreFactory.store();
变量列表=[
{'test':'value'}
];
var toAdd=jsonDecode(jsonecode(list));
试一试{
//这失败了
等待存储。添加全部(db,toAdd);
失败(“应该失败”);
}捕获(e){
expect(e,isNot(consttypematcher());
印刷品(e);
}
//这管用!
等待存储。添加所有(db,asMapList(toAdd));
});

jsonDecode(jsonecode(用户))的用意是什么?我想你需要转换成列表到列表。
User
上是否有一个函数可以生成类似于
toJson
的映射?如果是,您可以使用
users.map((u)=>u.toJson()).toList()
来代替
jsonDecode(jsonecode(users))
。谢谢-这很有效!