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

Updating Boolean value in Hive box for favorite field

我从我的 Hive 框中创建了一个特定类型的 Widget 列表。

  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,我认为这让我找到了正确的记录。但是,我该如何将收藏夹字段从 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 终端的连接,它就不会在未来的更改和应用程序重新启动时持续存在。这有什么原因吗?