检查sqlite数据库以确定图标的颜色

时间:2019-03-14 11:19:13

标签: sqlite dart flutter

我有一个数据库,我在其中存储喜欢的文章的ID,并创建了一个函数来检查表Favoris中的ID是否存在:

existFavoris(int idArticle) async{
    final db = await database;

    var res =await db.query("Favoris", where: "idArticle = ?", whereArgs: [idArticle]);
    return res.isNotEmpty;
  }

我创建了一个按钮,用于从表中添加/删除ID

StatefulBuilder(
          builder: (BuildContext context, StateSetter setState){
            return new IconButton(
              icon: new Icon(
                Icons.star, 
                color: decideColor(idArticle) 
              ),
              onPressed: (){
                if(DBProvider.db.existFavoris(idArticle)){
                  DBProvider.db.removeFromFavoris(idArticle);
                }
                else {
                  DBProvider.db.addToFavoris(idArticle);
                }
              },
            );
          },

这是用来检查ID是否存在于数据库中的DecisionColor()代码:

decideColor(int idArticle){
if (DBProvider.db.existFavoris(idArticle)){
  return Color(0xffffD700);
}
return Colors.white;

}

我不断收到此错误:

type 'Future<dynamic>' is not a subtype of type 'bool'

1 个答案:

答案 0 :(得分:1)

我看到您的existFavoris是异步的,那么它至少返回Future。您必须等待该功能的响应。


使onPressed异步并等待existFavoris

onPressed: () async {
    var exists = await DBProvider.db.existFavoris(idArticle);
    if(exists){
       DBProvider.db.removeFromFavoris(idArticle);
    } else {
       DBProvider.db.addToFavoris(idArticle);
    }
},