问题描述
为了优化我的代码,我尝试在 GestureDetector 小部件的 onTap 属性中使用 Function first class,如下面的代码所示:
import 'package:Flutter/material.dart';
class ReusableCard extends StatelessWidget {
final Color colour;
final Widget? childCard;
final Function? onPress;
ReusableCard({required this.colour,this.childCard,this.onPress}) ;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: onPress,child: Container(
child: childCard,margin: EdgeInsets.all(15.0),decoration: Boxdecoration(
color: colour,borderRadius:BorderRadius.circular(10.0),),);
}
}
但我得到了那个错误:参数类型“函数?”不能分配给参数类型“void Function()?”。
希望有人能解释一下这里发生了什么,并在此之前感谢您。
解决方法
您需要使用 Function()?
而不是 Function?
作为 onPress
变量的类型,因为 onTap
需要一个 GestureTapCallback
,它是 {{1 }}。
Function()
,
在这种情况下使用 VoidCallback?
而不是 Function?
。
最后,VoidCallback
被定义为 typedef VoidCallback = void Function()
,因此您甚至可以最终使用 Function()?
,但这是一个很酷的快捷方式。