如何在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
相关产品推荐
相关产品推荐

