0

为了优化我的代码,我尝试在 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()?”。

希望有人可以解释这里发生了什么,并在此之前感谢您。

4

2 回答 2

1

您需要使用Function()?而不是Function?作为onPress变量的类型,因为onTap需要 a GestureTapCallbackwhich is typedef for a 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),
        ),
      ),
    );
  }
}
于 2021-07-01T14:39:17.927 回答
1

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

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

于 2021-07-01T16:10:32.577 回答