微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dart中的Function first class和void function有什么区别

如何解决Dart中的Function first class和void function有什么区别

为了优化我的代码,我尝试在 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()?,但这是一个很酷的快捷方式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。