【问题标题】:what is the different between Function first class and void function in DartDart中的Function first class和void函数有什么区别
【发布时间】:2021-09-13 15:04:45
【问题描述】:

为了优化我的代码,我尝试在 GestureDetector 小部件的 onTap 属性中使用 Function 第一个类,如下面的代码所示:

 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()?'。

希望有人能解释一下这里发生了什么,谢谢你。

【问题讨论】:

    标签: flutter dart first-class-functions first-class


    【解决方案1】:

    在这种情况下使用VoidCallback? 而不是Function?

    最后,VoidCallback 被定义为typedef VoidCallback = void Function(),所以你甚至可以最终使用Function()?,但这是一个很酷的快捷方式。

    【讨论】:

    • GestureTapCallback? 也可以。
    【解决方案2】:

    您需要使用Function()? 而不是Function? 作为onPress 变量的类型,因为onTap 需要GestureTapCallback,这是Function() 的typedef。

    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),
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 很高兴能为您提供帮助:D
    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多