Dart 中的 Function first class 和 void function 有什么区别
what is the different between Function first class and void function in Dart
为了优化我的代码,我尝试在 GestureDetector 小部件的 onTap 属性 中首先使用 Function 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),
),
),
);
}
}
但我得到了那个错误:参数类型 'Function?' 不能分配给参数类型 'void Function()?'。
希望有人能解释一下这里发生了什么,谢谢你。
您需要使用 Function()?
而不是 Function?
作为 onPress
变量的类型,因为 onTap
需要一个 GestureTapCallback
,它是 Function()
.
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),
),
),
);
}
}
在这种情况下使用 VoidCallback?
而不是 Function?
。
最终,VoidCallback
被定义为 typedef VoidCallback = void Function()
,因此您甚至可以最终使用 Function()?
,但这是一个很酷的快捷方式。
为了优化我的代码,我尝试在 GestureDetector 小部件的 onTap 属性 中首先使用 Function 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),
),
),
);
}
}
但我得到了那个错误:参数类型 'Function?' 不能分配给参数类型 'void Function()?'。
希望有人能解释一下这里发生了什么,谢谢你。
您需要使用 Function()?
而不是 Function?
作为 onPress
变量的类型,因为 onTap
需要一个 GestureTapCallback
,它是 Function()
.
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),
),
),
);
}
}
在这种情况下使用 VoidCallback?
而不是 Function?
。
最终,VoidCallback
被定义为 typedef VoidCallback = void Function()
,因此您甚至可以最终使用 Function()?
,但这是一个很酷的快捷方式。