问题是标题。我正在尝试构建 todoye 应用程序,正如您所看到的,回调被认为是 ValueChanged<bool?> 不是一个简单的函数,所以我无法将我的逻辑移动到另一个 statefullwidget 以减少我的应用程序中的重建,我尝试了不同的事情,但我得到了总是出错请帮忙。这是我的代码:
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,
);
}
}
Run Code Online (Sandbox Code Playgroud)
错误出现在第 27 行...我想将我的自定义函数传递给我的 statelessWidget 的变量。
小智 13
我遇到了同样的问题,最终我成功了
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,
);
}
}
Run Code Online (Sandbox Code Playgroud)
像这样改变这个函数
void checkboxCallBack(bool? checkboxState) {
setState(() {
isChecked = checkboxState ?? true;
});
}
Run Code Online (Sandbox Code Playgroud)
并将 Checkbox 变量切换为:
final Function(bool?) toggleCheckboxState;
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为您已经声明了toggleCheckBoxStateas final ValueChanged<bool?> toggleCheckBoxState;,并且bool数据类型与数据类型不同bool?。bool?是一个可为空的布尔类型。要修复它,请将方法更改checkBoxCallback为以下
void checkBoxCallBack(bool? checkBoxState) {
if (checkBoxState != null) {
setState(() {
isChecked = checkBoxState;
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17085 次 |
| 最近记录: |