【问题标题】:CheckBox not getting ticked复选框没有被勾选
【发布时间】:2021-10-01 06:16:00
【问题描述】:

我正在制作一个列表应用程序,其中包含一个项目列表,后跟一个复选框。当我运行该应用程序时,复选框似乎改变了状态。它是非活动的。 我正在使用具有 null 安全性的颤振 sdk 版本 2.12.0。

这是我的代码

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class TaskTile extends StatefulWidget {
   const TaskTile({ required this.text});
  final Text text;
  @override
  State<TaskTile> createState() => _TaskTileState();
}
class _TaskTileState extends State<TaskTile> {
  bool isChecked = true;
  void checkBoxCallBack(bool checkBoxState)
  {
    setState((){
      isChecked = checkBoxState;
    });
  }
  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text('This is task',
      style:TextStyle(
        decoration:  isChecked ? TextDecoration.lineThrough:null),
      ),
      trailing:  TaskCheckBox(isChecked, checkBoxCallBack),
    );
  }
}
class TaskCheckBox   extends StatefulWidget {
  late final bool checkboxState;
  final Function toggleCheckBoxState;
  TaskCheckBox(this.checkboxState, this.toggleCheckBoxState);

  @override
  State<TaskCheckBox> createState() => _TaskCheckBoxState();
}

class _TaskCheckBoxState extends State<TaskCheckBox> {
  @override
  Widget build(BuildContext context) {
    return Checkbox(
    value:(widget.checkboxState),
    activeColor:Colors.lightBlueAccent,
      onChanged: (bool? value) {
      widget.toggleCheckBoxState;
      },
    );
  }
}

【问题讨论】:

    标签: android flutter dart flutter-layout flutter-dependencies


    【解决方案1】:

    试试下面的代码希望对你有帮助。

    声明布尔变量

    bool isChecked = false;
    

    您的小部件

       ListTile(
            title: Text(
              'This is task',
              style: TextStyle(
                  decoration: isChecked ? TextDecoration.lineThrough : null),
            ),
            trailing: Checkbox(
              checkColor: Colors.white,
              value: isChecked,
              onChanged: (bool? value) {
                setState(() {
                  isChecked = value!;
                });
              },
            ),
          ),
    

    您的检查前结果->

    您的检查结果->

    【讨论】:

    • 代码正在运行:)。谢谢。但我不明白状态如何从假变为真。
    • 欢迎,如果您的问题已解决,请接受并支持我的回答,谢谢,因为您的状态不是恒定的,它会像选中或未选中一样改变,请参阅 bool here
    【解决方案2】:

    toggleCheckBoxState 是一个没有参数的函数,这就是为什么checkBoxCallback 中的状态没有改变,因为参数checkBoxState 没有值。

    要修复它,您应该将TaskCheckBox 更改如下:

     class TaskCheckBox extends StatefulWidget {
          late final bool checkboxState;
          final Function(bool?) toggleCheckBoxState;
          TaskCheckBox(this.checkboxState, this.toggleCheckBoxState);
        
          @override
          State<TaskCheckBox> createState() => _TaskCheckBoxState();
        }
        
      class _TaskCheckBoxState extends State<TaskCheckBox> {
          @override
          Widget build(BuildContext context) {
            return Checkbox(
            value:(widget.checkboxState),
            activeColor:Colors.lightBlueAccent,
              onChanged: (bool? value) {
                widget.toggleCheckBoxState(value);
              },
            );
          }
        }
    

    【讨论】:

      【解决方案3】:

      您可以像这样拨打setState()

      setState(() {
          isChecked = !isChecked;
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-17
        • 2010-12-15
        • 2020-09-14
        • 2016-01-02
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-12
        相关资源
        最近更新 更多