dart 使用SQLITE实现收藏夹功能

nfzehxib  于 2023-01-22  发布在  SQLite
关注(0)|答案(2)|浏览(185)

我需要帮助,我正在开发一个应用程序使用SQLite,这里是我的场景,我想使最喜爱的功能使用SQLLITE,如果该值确实存在,然后填补红色的心脏图标,否则删除心脏图标的颜色。

这是我的密码

//this table where i am fetching all data
    
    //fetch all verse
       static Future<List<Map<String, dynamic>>> fetchallverse(String database, int booknumber,int chapternumber) async {
         final db = await Dbhelper().db;
         return db!.rawQuery('SELECT  DISTINCT id,v,t from ${database} WHERE b=${booknumber} AND c=${chapternumber}');
    
    
       }
    
    //this feature used add favourite
    //add favourite
      static favourite(var bookname,var chapternumber,var versenumber,var verse,var bookid) async {
    final db = await Dbhelper().db;
      //  db!.rawInsert('INSERT INTO favourite(bookname, chapternumber,versenumber,verse,bookid) VALUES("${bookname},${chapternumber},${versenumber},${verse},${bookid}")');
    
    db!.rawInsert('INSERT INTO favourite(bookname, chapternumber,versenumber,verse,bookid) VALUES("${bookname}",${chapternumber},${versenumber},"${verse}",$bookid)');
    print(db);
    
      }
    //now fethcing data from favourite successfully
    
    //data coming from favourite
      static Future<List<Map<String, dynamic>>> getfavourite() async {
        final db = await Dbhelper().db;
        return db!.rawQuery('SELECT * from  favourite');
    
        }
    
    
    
    
    
//here is my listview favourite button make code shorter for easier understing

收藏按钮(

iconDisabledColor: Colors.grey,
                 iconSize:30,
                 valueChanged: (_isFavorite) {

                    Dbhelper.favourite(widget.bookname,widget.chapternumber,allverse[index]['v'],allverse[index]['t'],allverse[index]['id']);
                 },
               ),
rqenqsqc

rqenqsqc1#

要检查SQLite数据库中是否存在某个值,可以使用带有WHERE子句的SELECT语句来检查表中是否存在所需的值。如果查询返回值,则表示表中存在该值,可以用红色填充心形图标。如果没有返回值,则表示表中不存在该值。你可以去掉心形图标的颜色。
下面是一个如何检查“收藏夹”表中是否存在某个值的示例:

static Future<List<Map<String, dynamic>>> checkFavourite(var bookname,var chapternumber,var versenumber) async {
  final db = await Dbhelper().db;
  return db!.rawQuery('SELECT * FROM favourite WHERE bookname = "$bookname" AND chapternumber = $chapternumber AND versenumber = $versenumber');
}

然后,可以使用所需的值调用此方法,并检查返回列表的长度以查看该值是否存在于表中。

List<Map<String, dynamic>> isFavourite = await Dbhelper.checkFavourite(widget.bookname,widget.chapternumber,allverse[index]['v']);
if(isFavourite.length > 0) {
  // fill heart icon with red color
} else {
  // remove color from the heart icon
}

注意:您应该使用参数化查询而不是字符串串联,以避免代码中的SQL注入漏洞。

1l5u6lss

1l5u6lss2#

我很抱歉这不是答案。但由于声誉不高,我不能评论的问题。我想告诉你,你必须添加更多的细节,这与它很难找到解决方案,你可以在这里添加源代码或评论一个github回购链接。这将是一个更容易从这拿出一个很好的解决方案。

相关问题