不能将参数类型“Function”分配给参数类型“void Function(bool?)?”。空对象

时间:2021-06-14 15:51:17

标签: function flutter checkbox flutter-layout

这是我的代码 并且在fluttre更新到2.13版本之后出现错误,所以请帮助.... 错误发生在 TaskCheckBox 类的 onchanged 方法上 and dart analys return 不能将参数类型“Function”分配给参数类型“void Function(bool?)?”。

class TaskTile extends StatefulWidget {
  @override
  _TaskTileState createState() => _TaskTileState();
}

class _TaskTileState extends State<TaskTile> {
  bool isChecked = false;

  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Text(
        'This is task.',
        style: TextStyle(
          decoration: isChecked ? TextDecoration.lineThrough : null,
        ),
      ),
      trailing: TaskCheckBox(checkboxState: isChecked,toggleCheckboxState: (bool checkboxState) {
        setState(() {
          isChecked = checkboxState;
        });
      }),
    );
  }
}

class TaskCheckBox extends StatelessWidget {
  final bool checkboxState;
  final Function toggleCheckboxState;

  TaskCheckBox({required this.checkboxState,required this.toggleCheckboxState});

  @override
  Widget build(BuildContext context) {
    return Checkbox(
      activeColor: Colors.lightBlueAccent,
      value: checkboxState,
      onChanged: toggleCheckboxState,
    );
  }
}

3 个答案:

答案 0 :(得分:0)

您正在发送一个期望接收布尔值的函数,但在 TaskCheckBox 中您正在接收一个普通函数 复选框也期望接收相同的类型,一个带有 bool 值的函数

改成这个

final Function(bool) toggleCheckboxState;

最终结果

 class TaskCheckBox extends StatelessWidget {
  final bool checkboxState;
  final Function(bool) toggleCheckboxState;

  TaskCheckBox({
    @required this.checkboxState,
    @required this.toggleCheckboxState,
  });

答案 1 :(得分:0)

我在另一篇帖子中回答了这个问题 error: The argument type 'void Function(bool)' can't be assigned to the parameter type 'void Function(bool?)'

我将 checkboxCallback 方法更新为:

void checkBoxCallBack(bool? checkBoxState) {
    if (checkBoxState != null) {
      setState(() {
        isChecked = checkBoxState;
      });
    }
  }

onChanged:Checkbox 属性:

onChanged: toggleCheckboxState as void Function(bool?)?,

它消除了错误。

答案 2 :(得分:0)

我遇到了同样的错误,然后我将 theowl-0011 的答案与 p2kr 结合起来解决了这个问题 请检查我的方法。它有效...

只需将 toggleCheckBox: 更改为:

    (bool? checkBoxState) {
    if (checkBoxState != null) {
      setState(() {
        isChecked = checkBoxState;
      });
    }

然后final Function toggleCheckbox;

 final Function(bool?) toggleCheckbox;