参数类型"动态函数(布尔)?"不能分配给参数类型"void Function(bool?)?扑动



最近我遇到了这个问题,但我不知道它在哪里。我得到了这个错误。参数类型'dynamic Function(bool)?'不能分配给参数类型'void函数(bool?)?'

我哪里出错了?

class GroceryTile extends StatelessWidget {
GroceryTile({Key? key, required this.item, required this.onComplete})
: textDecoration = item.isComplete != null
? TextDecoration.lineThrough
: TextDecoration.none,
super(key: key);
final GroceryItem item;
final  Function(bool) onComplete;
final TextDecoration textDecoration;
@override
Widget build(BuildContext context) {
return Container(
height: 100.0,
// TODO: 20 Replace this color
color: Colors.red,
);
}

Widget buildCheckbox() {
return Checkbox(
value: item.isComplete,
onChanged: **onComplete** //error is occurring here
);
}
}
final void Function(bool?)? onComplete

Checkbox是一个void函数,所以你也应该在你的OnComplete声明中加上void,如果你不使用nullsafety,只要删除这个符号?

成员onComplete的类型为

void Function(bool)

必须是

void Function(bool?)

必须能够处理空参数

发生错误是因为复选框onChanged方法需要一个函数(bool?)?但是你已经提供了一个动态函数(bool)?void Function(bool?)?表示复选框onChanged的值方法可以是null或者一个带空参数的函数。

简单地改变你的onChange的签名方法将修复此问题。

final void Function(bool?) onComplete;

最好检查这类错误的文档,找出正确的函数签名。

如果您从阅读《Flutter Apprentice》一书中键入此代码,您可能希望将final Function(bool) onComplete;替换为书中的内容,即final Function(bool?)? onComplete;

我们在这里看到的问号是Dart允许变量为空的符号。最外面的问号Function()? onComplete表示onComplete函数可能为空。最里面的问号Function(bool?)表示调用参数可以是布尔值,也可以是空值。

这个null保护也存在于JavaScript和TypeScript中。请看FreeCodeCamp的文章:https://www.freecodecamp.org/news/how-the-question-mark-works-in-javascript/

相关内容

  • 没有找到相关文章

最新更新