sqlite - 检查sqlite数据库来决定图标的颜色

标签 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 是否存在于数据库中的 decideColor() 代码:

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

我一直收到这个错误:

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

最佳答案

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


使 onPressed 异步并等待 existFavoris

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

关于sqlite - 检查sqlite数据库来决定图标的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55161171/

相关文章:

flutter - SuffixIcon 不适用于 AutoCompleteTextField

flutter - 当 AppLifeCycleState.detached 被调用时?

flutter - 新创建的 SQFlite 数据库中的事务/批处理

flutter - 在 flutter 中,如何添加一个看起来像带下划线的文本字段的轮廓按钮?

C 和 Sqlite3 - 变量数据库和表命名 - SQL 语法错误

database - 如何在空表中获取正确的 DataColumn 数据类型?

sqlite - SQLite查询:排序后获取行索引

dart - FutureBuilder 与 setState 的结合使用

dart - StreamBuilder 抛出 Dirty State 说 Invalid Arguments

python - 将变量分配给 SQLite 元组时出现问题