Flutter中Function参数无法赋值给void Function()?类型报错如何解决
问题原因
Dart 2.12及以上版本启用了严格的类型校验规则,GestureDetector组件的onTap参数固定要求接收void Function()?类型(无参数、无返回值的可空函数),你当前定义的onPress是通用Function类型,该类型可以指代任意参数、任意返回值的函数,和onTap要求的类型不匹配,因此触发类型赋值错误。
此前部分旧教程建议写通用Function是因为Dart旧版本类型校验宽松,该写法现在已经不符合空安全规范。
解决方法
直接把onPress的类型从通用Function改为和onTap匹配的明确函数类型即可,修改后的完整代码如下:
import 'package:flutter/material.dart'; class ReusableCard extends StatelessWidget { ReusableCard( {required this.colour, required this.cardChild, required this.onPress}); final Color colour; final Widget cardChild; // 替换原Function类型定义 final void Function() onPress; @override Widget build(BuildContext context) { return GestureDetector( onTap: onPress, child: Container( child: cardChild, margin: EdgeInsets.all(15.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), color: colour, ), ), ); } }
如果你的点击回调允许为空,只需要做两处调整即可:
- 把
onPress类型改为void Function()? - 去掉构造函数中
onPress参数的required修饰
内容的提问来源于stack exchange,提问作者jonnyf
相关产品推荐
相关产品推荐

