参数类型 'Function?' 无法分配给参数类型 'void Function()?'
The argument type 'Function?' can't be assigned to the parameter type 'void Function()?'
我有一个重构的小部件,它有一个 onPressed
。但是每当我尝试访问该函数时,我都会收到此错误:
The argument type Function? can't be assigned to the parameter type void Function()?
这是重构小部件的代码:
class DialogBox extends StatelessWidget {
const DialogBox(
{@required this.contentTitle, @required this.labelText, this.onpressed});
final String? contentTitle;
final String? labelText;
final Function? onpressed;
@override
Widget build(BuildContext context) {
return new AlertDialog(
title: Text(
contentTitle!,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
),
),
content: new SingleChildScrollView(
child: ListBody(
children: <Widget>[
TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: labelText,
),
keyboardType: TextInputType.text,
),
],
),
),
actions: [
new TextButton(
child: new Text(
'Confirm',
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
),
),
onPressed:
onpressed, //getting the error here.
),
new TextButton(
child: new Text(
'Cancel',
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
),
),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
}
}
请大神解释一下这个问题的原因。任何帮助将不胜感激。
对于 onpressed
变量,您需要使用 Function()?
数据类型而不是 Function?
。
final Function()? onpressed;
此外,删除 ;
并将 ,
放在以下行中:
onPressed: onpressed,
这是在声明一个函数类型的参数?与类型 void Function()? 不同。这是因为函数类型的参数?与 void Function() 类型有很大不同吗?因为前者可以有任何 return 值,但后者明确地 returns 非(注意:非不同于 null)。
要解决此问题:尝试更改声明函数?在上面的函数代码中?无效功能()?。
像这样:
class DialogBox extends StatelessWidget {
const DialogBox(
{@required this.contentTitle, @required this.labelText,
this.onpressed});
final String? contentTitle;
final String? labelText;
final void Function()? onpressed;
...
}
我有一个重构的小部件,它有一个 onPressed
。但是每当我尝试访问该函数时,我都会收到此错误:
The argument type Function? can't be assigned to the parameter type void Function()?
这是重构小部件的代码:
class DialogBox extends StatelessWidget {
const DialogBox(
{@required this.contentTitle, @required this.labelText, this.onpressed});
final String? contentTitle;
final String? labelText;
final Function? onpressed;
@override
Widget build(BuildContext context) {
return new AlertDialog(
title: Text(
contentTitle!,
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
),
),
content: new SingleChildScrollView(
child: ListBody(
children: <Widget>[
TextFormField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: labelText,
),
keyboardType: TextInputType.text,
),
],
),
),
actions: [
new TextButton(
child: new Text(
'Confirm',
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
),
),
onPressed:
onpressed, //getting the error here.
),
new TextButton(
child: new Text(
'Cancel',
style: TextStyle(
color: Theme.of(context).colorScheme.secondary,
),
),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
}
}
请大神解释一下这个问题的原因。任何帮助将不胜感激。
对于 onpressed
变量,您需要使用 Function()?
数据类型而不是 Function?
。
final Function()? onpressed;
此外,删除 ;
并将 ,
放在以下行中:
onPressed: onpressed,
这是在声明一个函数类型的参数?与类型 void Function()? 不同。这是因为函数类型的参数?与 void Function() 类型有很大不同吗?因为前者可以有任何 return 值,但后者明确地 returns 非(注意:非不同于 null)。
要解决此问题:尝试更改声明函数?在上面的函数代码中?无效功能()?。
像这样:
class DialogBox extends StatelessWidget {
const DialogBox(
{@required this.contentTitle, @required this.labelText,
this.onpressed});
final String? contentTitle;
final String? labelText;
final void Function()? onpressed;
...
}