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

Flutter类型转换报错:Null非int子类型但实际值非空的原因排查

问题原因分析

你的报错type 'Null' is not a subtype of type 'int' in type cast,根源不在answer['score']本身,而是**answerQuestion函数的返回值是void,导致你把void(运行时等价于null)强制转换成int**,具体拆解:

  1. 看错误行的代码逻辑:

    () => answerQuestion(answer['score']) as int
    

    这个箭头函数的执行逻辑是:先调用answerQuestion(answer['score']),再把该函数的返回值做as int类型转换。

  2. 如果answerQuestion的函数定义是无返回值的(比如void answerQuestion(int score) {...}),那么调用它的结果在Dart中会被视为null(void类型表达式的求值结果就是null)。此时你试图把null强制转为int,就会触发类型转换错误。

  3. IDE显示score的值为10是正确的——answer['score']确实是你硬编码的非空值,并且已经正确传递给了answerQuestion,但问题出在函数调用后的类型转换步骤。

为什么移除类型转换就解决问题?

当你去掉as int后,箭头函数的返回值是void(对应运行时的null),而如果Answer组件的第一个参数接受的是VoidCallback(无返回值的函数类型),此时类型匹配,自然不会再报错。

验证与修正方向
  • 检查answerQuestion的函数定义:确认它的返回类型是否为void。如果是,那就是上述原因。
  • 如果你需要箭头函数返回score的值,有两种修正方式:
    • 让answerQuestion返回传入的score,比如:
      int answerQuestion(int score) {
        // 你的原有逻辑
        return score;
      }
      
    • 或者直接执行函数调用,不需要返回值:
      () {
        answerQuestion(answer['score'] as int);
      },
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:20:44