You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Function参数无法赋值给void Function()?类型报错如何解决

问题原因

Dart 2.12及以上版本启用了严格的类型校验规则,GestureDetector组件的onTap参数固定要求接收void Function()?类型(无参数、无返回值的可空函数),你当前定义的onPress是通用Function类型,该类型可以指代任意参数、任意返回值的函数,和onTap要求的类型不匹配,因此触发类型赋值错误。
此前部分旧教程建议写通用Function是因为Dart旧版本类型校验宽松,该写法现在已经不符合空安全规范。

解决方法

直接把onPress的类型从通用Function改为和onTap匹配的明确函数类型即可,修改后的完整代码如下:

import 'package:flutter/material.dart';

class ReusableCard extends StatelessWidget {
  ReusableCard(
      {required this.colour, required this.cardChild, required this.onPress});
  final Color colour;
  final Widget cardChild;
  // 替换原Function类型定义
  final void Function() onPress;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onPress,
      child: Container(
        child: cardChild,
        margin: EdgeInsets.all(15.0),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(10.0),
          color: colour,
        ),
      ),
    );
  }
}

如果你的点击回调允许为空,只需要做两处调整即可:

  • 把onPress类型改为void Function()?
  • 去掉构造函数中onPress参数的required修饰

内容的提问来源于stack exchange,提问作者jonnyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:54:05