更新 Hive 框中最喜欢的字段的布尔值

问题描述

从我的 Hive 框中,我创建了一个特定类型的小部件列表。

  Hive.Box<Job>('jobBox').values.where((element) => element.jobType == selectedType).toList().map(
        (jobList)

我创建了一个收藏夹按钮,它根据 Hive 框中的初始存储值生成,因此如果它已设置为 true 或 false。

              GestureDetector(
                  child: Icon(
                    jobList.fav
                        ? Icons.favorite
                        : Icons.favorite_border,color: jobList.fav ? Colors.red.shade200 : Colors.grey,),onTap: () {
                    if (jobList.fav == true){
                      setState(() {
                        jobList.fav = false;
                       // Hive.Box<Job>('jobBox').putAt(); //This is where I am having my problem
                        print(jobList.jobID );
                        print(jobList.fav );
                      });

                    }
                    else{
                      setState(() {
                        jobList.fav = true;
                        // Hive.Box<Job>('jobBox').putAt(); //This is where I am having my problem
                        print(jobList.jobID );
                        print(jobList.fav );
                      });
                    }
                  }
                // )
              ),

setState 更新收藏夹图标并更改值,但在关闭和重新打开应用程序时,它会恢复 Hive 框中的原始认值。这是有道理的,因为我还没有更新 Hive 框。

但是在 Hive 框中更新这个 fav 值的正确方法是什么?我已经尝试使用索引的 jobID 进行 putAt,我认为这可以让我找到正确的记录。但是如何将 fav 字段从 true 更改为 false 或从 false 更改为 true?

我是否必须覆盖此索引处框中的所有字段值?

Hive.Box<Job>('jobBox').putAt(jobList.jobID,???);

解决方法

所以我改变了这个

jobList.fav = true;
// Hive.box<Job>('jobBox').putAt();

为此:

 jobList.fav = true;
 Hive.box<Job>('jobBox').putAt(jobList.jobID-1,job);

我必须做 -1,因为我的作业 ID 从 1 开始,而 Hive 框上的索引从 0 开始。我可以稍后返回并更改它。我没有找到只更新 Hive Box 中的 fav 值的方法,但是如果我这样做,通过更新列表然后将该项目放入相同索引的框中,它在关闭应用程序并重新打开应用程序时仍然存在应用。

但是一旦它失去与 IDE 终端的连接,它就不会在未来的更改和应用程序重新启动时持续存在。这有什么原因吗?