Flutter开发中如何修复'This expression has type void'报错
报错信息
lib/pages/pomodoro.dart:31:21: Error: This expression has type 'void' and can't be used. ? null ^
错误原因
这个报错确实由EntradaTempo组件inc属性的条件表达式引发,核心问题有两点:
- Dart三目运算符要求冒号前后两个分支的返回类型兼容,你写的
store.incrementarTempoWork()是直接执行方法,该方法返回值为void,和前一分支的null类型不匹配,直接触发类型校验错误。 - 从业务逻辑看,
inc参数需要接收点击时触发的回调函数,给方法加括号等于在组件build阶段就直接执行了时间增量逻辑,根本不是把回调传给组件等待点击触发,逻辑本身也写错了。
修复方案
去掉incrementarTempoWork后面的括号,改为传递函数引用而非方法执行结果,让三目运算符两个分支的类型统一为可空回调类型(VoidCallback?),既符合类型校验规则,也能正确把点击回调传给组件。
修正后的对应代码片段:
EntradaTempo( titulo: 'Work', valor: store.tempoWork, inc: store.start && store.isWorking() ? null : store.incrementarTempoWork, dec: store.reduceTempoRest, ),
注意:需要同步检查
dec参数传入的store.reduceTempoRest,如果不小心加了括号写成执行方法的形式,会触发完全相同的void类型报错。
内容的提问来源于stack exchange,提问作者pomoworko.com
相关产品推荐
相关产品推荐

