Flutter 中复选框的 OnChanged 状态

OnChanged State of Checkbox in Flutter

我正在开发待办事项列表应用程序并使用 CheckBox 来检查列表中的待办事项。

但是在刷新页面时它一直回到未选中状态。 我想将状态保存在数据库中。 我在 getAllTodos

中填充 todoList

代码如下:

List<Todo>_todoList=List<Todo>();

@override
  initState(){
    super.initState();

    getAllTodos();

  }
        getAllTodos()async{
            _todoService=TodoService();
            _todoList=List<Todo>();
        
            var todos= await _todoService.readTodo();
        
            todos.forEach((todo){
              setState(() {
                var model=Todo();
                model.id=todo['id'];
                model.title=todo['title'];
                model.dueDate=todo['dueDate'];
                model.category=todo['category'];
                model.isFinished=todo['isFinished'];
                _todoList.add(model);
              });
            });
          } 
        
            body: ListView.builder(itemCount: _todoList.length,itemBuilder: (context, index){
                return Padding(
                  padding:  EdgeInsets.only(top:8.0, left: 8.0, right: 8.0),
        

          child: Card (
                elevation: 8.0,
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(0)
                ),
                  child: InkWell(
                    onTap: (){
                      setState(() {
                        _todoList[index].isChecked=!_todoList[index].isChecked;
                      });
                    },
                    child: ListTile(
                      leading: Checkbox(
                        checkColor: Colors.indigo,
                        value: _todoList[index].isChecked,
                        onChanged: (bool value){
                          setState(() {
                            _todoList[index].isChecked=value;
_todoService.saveTodo(_todoList[index]);
                          });
                        },
                      ),
                      title: Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: <Widget>[
                          Text(_todoList[index].title ?? 'No Title',
                            style: TextStyle(decoration: (_todoList[index].isChecked? TextDecoration.lineThrough: TextDecoration.none),
                            ),
                          ),
                          IconButton(icon: Icon(Icons.delete,color: Colors.red,
                          ),
                              onPressed: (){
                                _deleteFormDialog(context,_todoList[index].id);
                              }
                          ),
                        ],
                      ),
                      subtitle: Text(_todoList[index].dueDate ?? 'No Due Date'),
                    ),
                  ),
              ),
            );
          }),

这里是 isChecked 值:

class Todo{
  bool isChecked=false; 
}

请帮帮我。

更新: 在 onChanged 回调的 setState() 中添加一行调用服务方法通过 _todoService.saveTodo(_todoList[index]);[= 更改复选框的状态16=]

现在的问题是 onChange() 在单击时被调用了两次。如何更正onChange回调中的多次调用?

按照 here w.r.t 复选框操作中的步骤进行操作。

希望一切顺利!