问题是标题。我正在尝试构建 todoye 应用程序,正如您所看到的,回调被认为是 ValueChanged
import 'package:flutter/material.dart';
class TaskTile extends StatefulWidget {
@override
_TaskTileState createState() => _TaskTileState();
}
class _TaskTileState extends State<TaskTile> {
bool isChecked = false;
void checkBoxCallBack(bool checkBoxState) {
setState(() {
isChecked = checkBoxState;
});
}
@override
Widget build(BuildContext context) {
return ListTile(
title: Text(
'finish up angla\'s course today',
style: TextStyle(
decoration: isChecked ? TextDecoration.lineThrough : null,
),
),
trailing: TaskCheckBox(
checkBoxState: isChecked,
toggleCheckBoxState: checkBoxCallBack,
),
);
}
}
class TaskCheckBox extends StatelessWidget {
final bool checkBoxState;
final ValueChanged<bool?> toggleCheckBoxState;
const TaskCheckBox({
required this.checkBoxState,
required this.toggleCheckBoxState,
});
@override
Widget build(BuildContext context) {
return Checkbox(
activeColor: Colors.lime,
value: checkBoxState,
onChanged: toggleCheckBoxState,
);
}
}
错误在第 27 行......我想将我的自定义函数传递给我的 statelessWidget 的变量。
答案 0 :(得分:2)
发生这种情况是因为您已将 toggleCheckBoxState
声明为 final ValueChanged<bool?> toggleCheckBoxState;
,并且 bool
数据类型与 bool?
数据类型不同。 bool?
是一个可为空的布尔类型。要修复它,请将方法 checkBoxCallback
更改为以下内容
void checkBoxCallBack(bool? checkBoxState) {
if (checkBoxState != null) {
setState(() {
isChecked = checkBoxState;
});
}
}
答案 1 :(得分:1)
我遇到了同样的问题,当我尝试更新方法 checkboxCallback
为此:
void checkBoxCallBack(bool? checkBoxState) {
if (checkBoxState != null) {
setState(() {
isChecked = checkBoxState;
});
}
}
我仍然遇到错误,但是当我尝试更新 onChanged:
Checkbox
属性时
进入这个:
onChanged: toggleCheckboxState as void Function(bool?)?,
我不知道为什么或如何,但它完成了工作。
更新代码:
import 'package:flutter/material.dart';
class TaskTile extends StatefulWidget {
@override
_TaskTileState createState() => _TaskTileState();
}
class _TaskTileState extends State<TaskTile> {
bool isChecked = false;
void checkBoxCallBack(bool? checkBoxState) {
if (checkBoxState != null) {
setState(() {
isChecked = checkBoxState;
});
}
}
@override
Widget build(BuildContext context) {
return ListTile(
title: Text(
'this is a sample task',
style: TextStyle(
decoration: isChecked ? TextDecoration.lineThrough : null),
),
trailing: TaskCheckbox(
checkboxState: isChecked,
toggleCheckboxState: checkBoxCallBack,
),
);
}
}
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 as void Function(bool?)?,
);
}
}
答案 2 :(得分:0)
我遇到了同样的问题,最终我成功了
C:\Users\${username}\.ballerina\repositories\central.ballerina.io
像这样改变这个函数
import 'package:flutter/material.dart';
class TaskTile extends StatefulWidget {
@override
_TaskTileState createState() => _TaskTileState();
}
class _TaskTileState extends State<TaskTile> {
bool isChecked = false;
void checkboxCallBack(bool? checkboxState) {
setState(() {
isChecked = checkboxState ?? true;
});
}
@override
Widget build(BuildContext context) {
return ListTile(
title: Text(
'Task 1',
style: TextStyle(
decoration:
isChecked ? TextDecoration.lineThrough : TextDecoration.none),
),
trailing: TaskCheckbox(isChecked, checkboxCallBack),
);
}
}
class TaskCheckbox extends StatelessWidget {
final bool checkboxState;
final Function(bool?) toggleCheckboxState;
TaskCheckbox(this.checkboxState, this.toggleCheckboxState);
@override
Widget build(BuildContext context) {
return Checkbox(
activeColor: Colors.lightBlueAccent,
value: checkboxState,
onChanged: toggleCheckboxState,
);
}
}
和toggleCheckbox变量:
void checkboxCallBack(bool? checkboxState) {
setState(() {
isChecked = checkboxState ?? true;
});
}