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()?,但这是一个很酷的快捷方式。