【问题标题】:OnChanged State of Checkbox in FlutterFlutter中复选框的OnChanged状态
【发布时间】:2020-11-11 02:11:31
【问题描述】:

我正在开发待办事项应用程序并使用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]);调用服务方法来改变复选框的状态

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

【问题讨论】:

  • 您在哪里填充_todoList?请添加代码
  • 添加了代码@CristianBregant
  • @RuchitaBhaskar 但它实际上在哪里?在您的 build() 方法中?
  • 不,在 build() 方法之外@MiguelRuivo
  • 你在哪里打电话给getAllTodos()

标签: android-studio flutter checkbox state sqflite


【解决方案1】:

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

希望一切正常!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多