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

如何在Flutter类中正确声明无返回值函数解决类型不匹配报错

问题原因

报错本质是定义的onPressed字段类型Function为无签名限制的泛型函数类型,和MaterialButton的onPressed参数要求的无参、无返回值可空函数类型void Function()? 签名不匹配。之前仅将类型改为void属于类型定义错误,void是返回值类型,不能直接用来定义函数变量。

修复方案
  • 第一步:将onPressed字段的类型调整为匹配的函数签名,可直接使用Flutter预置的VoidCallback类型(本质是void Function()的官方别名),如果允许点击回调为空就加上可空标记?
  • 第二步:如果业务要求RoundedButton必须传入点击回调,保留构造函数的required修饰符即可,无需额外处理空值

修复后完整代码:

class RoundedButton extends StatelessWidget {
  const RoundedButton({
    required this.colour, 
    required this.title, 
    required this.onPressed
  });
  final Color colour;
  final String title;
  // 修正为匹配的函数类型
  final VoidCallback onPressed;
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 16.0),
      child: Material(
        elevation: 5.0,
        color: colour,
        borderRadius: BorderRadius.circular(30.0),
        child: MaterialButton(
          onPressed: onPressed,
          minWidth: 200.0,
          height: 42.0,
          child: Text(title),
        ),
      ),
    );
  }
}

如果需要支持可选点击回调,将字段定义改为final VoidCallback? onPressed;,同时去掉构造函数的required修饰符即可,可空类型可以直接赋值给MaterialButton的onPressed参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:39:03