Flutter Hive 更新

问题描述 投票:0回答:1
return ListTile(
      tileColor: componnentsColor,
      leading: IconButton(
        icon: widget.isDone? const Icon(Icons.check_box) : const Icon(Icons.check_box_outline_blank),
        color: textColor,
        onPressed: () {
          setState(() {
            widget.isDone = !widget.isDone;
            if (widget.isList){
              Lists dbList= listsBox.get(widget.listName);
              dbList.tasks.add(Task(isDone: widget.isDone, task: widget.taskName, description: widget.taskDescription, date: widget.taskDate));
              listsBox.put(widget.listName, Lists(isDone: dbList.isDone, task: dbList.task, description: dbList.description, tasks: dbList.tasks));
            }else{
              taskBox.put(widget.taskName, Task(isDone: widget.isDone, task: widget.taskName, description: widget.taskDescription, date: widget.taskDate));
            }
          });
        },
      ),
      title: Text(
        widget.taskName,
        style: const TextStyle(
          color: textColor,
        ),
      ),
      subtitle: Text(
        '${widget.taskDate}',
        style: const TextStyle(
          color: textColor,
        ),
      ),
      trailing: const Icon(
        Icons.expand_more,
        color: textColor,
      ),
      onTap: () {
      },
    );

这段代码以及我更改状态的确切时间。 我更新局部变量: widget.isDone = !widget.isDone; 我通过变量 isList 检查它是否是一个列表; 我想使用以下代码更新我的配置单元数据库: if (widget.isList){ 列表 dbList=listsBox.get(widget.listName); dbList.tasks.add(任务(isDone: widget.isDone, 任务: widget.taskName, 描述: widget.taskDescription, 日期: widget.taskDate)); listBox.put(widget.listName, Lists(isDone: dbList.isDone, 任务: dbList.task, 描述: dbList.description, 任务: dbList.tasks)); } 问题:

它重复了我列表中的待办事项,因此我得到的不是带有更新的 isDone 变量的待办事项 两种:一种更新了,一种未更新......知道发生了什么事吗?

flutter flutter-hive
1个回答
0
投票

我发现了问题。我自己使用 list.add 复制它...

相反,我需要使用 dbList.tasks[dbList.tasks.indexWhere((element) => element?.task == widget.taskName)]?.isDone = widget.isDone;

© www.soinside.com 2019 - 2024. All rights reserved.