Flutter报错参数类型Function无法赋值给void Function()?该如何解决
问题解决方法
错误原因
Dart的强类型校验机制要求ElevatedButton组件的onPressed参数必须接收void Function()?类型(无参数、无返回值的可选函数对象)。你在answer.dart中将回调参数声明为通用Function类型,通用Function没有限定参数和返回值格式,不符合onPressed的类型要求,因此触发编译报错。
修复步骤
仅需要修改answer.dart中的selectHandler变量的类型声明即可,有两种可选写法:
写法1:直接明确函数签名
将
final Function selectHandler;
修改为
final void Function() selectHandler;
写法2:使用Flutter内置别名
Flutter已经预置了VoidCallback类型作为void Function()的别名,也可以写成:
final VoidCallback selectHandler;
修改后的完整answer.dart代码
import 'package:flutter/material.dart'; class Answer extends StatelessWidget { final VoidCallback selectHandler; Answer(this.selectHandler); @override Widget build(BuildContext context) { return Container( width: double.infinity, child: ElevatedButton( child: Text('Ans 1'), onPressed: selectHandler, style: ElevatedButton.styleFrom( primary: Colors.red, ), ), ); } }
补充:如果你的项目开启了空安全且存在回调不传的场景,也可以给类型加可空标记
final VoidCallback? selectHandler;,直接传入onPressed即可适配可空要求。
内容的提问来源于stack exchange,提问作者Vineet Bhargava
相关产品推荐
相关产品推荐

