在onTap 方法中直接调用函数还是在Dart/Flutter 中使用fat 运算符?
Call function in onTap method directly or using fat operator in Dart/Flutter?
我在我的应用程序中创建了一个功能,可以根据我的需要制作自定义小部件。这是函数的代码
Widget customCircularButton(
{String title, String subTitle, String img, void Function() onTap}) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
GestureDetector(
onTap: onTap,
child: CircleAvatar(
radius: screenWidth(context) / 6,
backgroundColor: pColor,
child: CircleAvatar(
radius: screenWidth(context) / 6 - 2,
backgroundColor: Colors.white,
backgroundImage: Image.asset(img).image,
),
),
),
Container(
margin: EdgeInsets.all(5),
child: Text(
title,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
margin: EdgeInsets.all(5),
width: screenWidth(context) / 3,
child: Text(
subTitle,
style: TextStyle(fontWeight: FontWeight.w300, fontSize: 12),
textAlign: TextAlign.center,
))
],
);
}
所以为了将这个函数调用到我的小部件中,我这样称呼它
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
customCircularButton(
title: 'Donate',
subTitle: 'Donate/Buy food for needy',
img: 'assets/images/donate-food.png',
onTap: donateDiaolg,
),
customCircularButton(
title: 'Become Volunteer',
subTitle: 'Distribute food to the needy',
img: 'assets/images/become-volunteer.png',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BecomeVolunteer()));
}),
],
),
这里的 donateDialog 是另一个打开对话框的函数。
void donateDiaolg() {
showDialog(..implementation..);}
所以我的疑问是应该使用 fat 运算符来调用 donateDialog 函数还是像上面的代码那样调用它。
我的基本问题是我应该使用这个
onTap: () => donateDialog(),
或这个
onTap: donateDialog(),
或者这样可以吗
onTap: donateDialog
如果有人能给我解释一下这三个函数调用就更好了。
这取决于函数签名。例如 onTap 属性 需要不带参数的函数。如果您的自定义函数相同,您可以直接使用您的函数名称,如 onTap: myFunc。如果您的函数签名采用 1 个或多个参数,您应该将空函数传递给 onTap 并通过它调用您的函数。
我在我的应用程序中创建了一个功能,可以根据我的需要制作自定义小部件。这是函数的代码
Widget customCircularButton(
{String title, String subTitle, String img, void Function() onTap}) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
GestureDetector(
onTap: onTap,
child: CircleAvatar(
radius: screenWidth(context) / 6,
backgroundColor: pColor,
child: CircleAvatar(
radius: screenWidth(context) / 6 - 2,
backgroundColor: Colors.white,
backgroundImage: Image.asset(img).image,
),
),
),
Container(
margin: EdgeInsets.all(5),
child: Text(
title,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
),
Container(
margin: EdgeInsets.all(5),
width: screenWidth(context) / 3,
child: Text(
subTitle,
style: TextStyle(fontWeight: FontWeight.w300, fontSize: 12),
textAlign: TextAlign.center,
))
],
);
}
所以为了将这个函数调用到我的小部件中,我这样称呼它
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
customCircularButton(
title: 'Donate',
subTitle: 'Donate/Buy food for needy',
img: 'assets/images/donate-food.png',
onTap: donateDiaolg,
),
customCircularButton(
title: 'Become Volunteer',
subTitle: 'Distribute food to the needy',
img: 'assets/images/become-volunteer.png',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BecomeVolunteer()));
}),
],
),
这里的 donateDialog 是另一个打开对话框的函数。
void donateDiaolg() {
showDialog(..implementation..);}
所以我的疑问是应该使用 fat 运算符来调用 donateDialog 函数还是像上面的代码那样调用它。
我的基本问题是我应该使用这个
onTap: () => donateDialog(),
或这个
onTap: donateDialog(),
或者这样可以吗
onTap: donateDialog
如果有人能给我解释一下这三个函数调用就更好了。
这取决于函数签名。例如 onTap 属性 需要不带参数的函数。如果您的自定义函数相同,您可以直接使用您的函数名称,如 onTap: myFunc。如果您的函数签名采用 1 个或多个参数,您应该将空函数传递给 onTap 并通过它调用您的函数。