从数据库获取行并将其添加到类型对象列表

时间:2019-08-20 15:35:42

标签: database sqlite flutter

我有一些行的数据库,我想获取表中的所有数据并将它们添加到对象类型列表中。

我尝试过:

var dbClient = await database;
result = await dbClient.rawQuery('SELECT * FROM $newsTable');
for (var n in result){
  favNews.add(n);
}

列表在其中:

List<NewsModel> favNews = <NewsModel>[];

但是出现此错误:

[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: type 'QueryRow' is not a subtype of type 'NewsModel'

如何获取新闻类型数组中的结果?

1 个答案:

答案 0 :(得分:0)

我假设您正在使用sqflite

rawQuery返回List<Map>,并且在迭代此列表时,循环n中的局部变量具有类型Map,无法将其分配给NewsModel

您需要向模型类NewsModel添加一些转换方法,以从Map进行转换。

甚至还有example in the sqflite documentation

class NewsModel {

  int id;
  String title;
  // ... more property

  NewsModel();

  NewsModel.fromMap(Map<String, dynamic> map) {
    id = map["id"]
    title = map["title"]
    // ...
  }


}

以及数据库中的查询代码:

var dbClient = await database;
result = await dbClient.rawQuery('SELECT * FROM $newsTable');
for (var n in result){
  favNews.add(NewsModel.fromMap(v));
}