参数类型"函数"不能分配给参数类型"void 函数(布尔值?



我试图使用构造函数参数传递函数,但它显示了标题中提到的错误。

import 'package:flutter/material.dart';
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 a 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,
);
}
}

我在网上搜索了一下,但没有找到。

如果有人能帮我,我会非常感激的。

您的final Function toggleCheckboxState;需要有一个bool?参数。

尝试如下:

final Function(bool?) toggleCheckboxState;

您还需要在分配toggleCheckboxState时更改代码,如下图所示,

toggleCheckboxState: (bool? checkboxState) {
setState(() {
isChecked = checkboxState!;
});
},

这里需要bool? checkboxState,因为您的类型是Function(bool?)

`import 'dart:ui';
import 'package:flutter/material.dart';
class TaskTile extends StatefulWidget {
@override
_TaskTileState createState() => _TaskTileState();
} 
class _TaskTileState extends State<TaskTile> {
bool isChecked = false;
checkBoxCallback(bool checkBoxState) {
setState(() {
isChecked = checkBoxState;
});
}
@override
Widget build(BuildContext context) {
return ListTile(
title: Text(
"Complete Assignments",
style: TextStyle(
decoration: isChecked ? TextDecoration.lineThrough : null,
fontSize: 20,
),
),
trailing: TaskCheckbox(
checkBoxState: isChecked, toggleCheckBoxState: checkBoxCallback), );
}
}
class TaskCheckbox extends StatelessWidget {
final bool checkBoxState;
final Function toggleCheckBoxState;
const TaskCheckbox(
{Key? key,
required this.checkBoxState,
required this.toggleCheckBoxState})
: super(key: key);
@override
Widget build(BuildContext context) {
return Checkbox(
activeColor: Colors.blue,
value: checkBoxState,
onChanged: (newValue) {
toggleCheckBoxState(newValue);
});
}
}

"我确信你也在看Anjela Yu和我的课程,我找到了解决方案"@关键字是关于零安全的向下投射

import 'package:flutter/material.dart';
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 a 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 as void Function(bool?)?
);
}
}

面对同样的问题,下面是我喜欢使用的代码示例。有关更多信息,请查看文档:复选框类

import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: const Center(
child: MyStatefulWidget(),
),
),
);
}
}
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({Key? key}) : super(key: key);
@override
State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
bool isChecked = false;
@override
Widget build(BuildContext context) {
Color getColor(Set<MaterialState> states) {
const Set<MaterialState> interactiveStates = <MaterialState>{
MaterialState.pressed,
MaterialState.hovered,
MaterialState.focused,
};
if (states.any(interactiveStates.contains)) {
return Colors.blue;
}
return Colors.red;
}
return Checkbox(
checkColor: Colors.white,
fillColor: MaterialStateProperty.resolveWith(getColor),
value: isChecked,
onChanged: (bool? value) {
setState(() {
isChecked = value!;
});
},
);
}
}

最新更新