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

Flutter Dart错误求助:void Function(int)无法赋值给dynamic Function(dynamic)

解决Flutter函数参数类型不匹配问题

这个错误是因为_answerQuestion的函数签名(void Function(int))和Quiz组件answerQuestion参数要求的签名(dynamic Function(dynamic))不匹配导致的,有两种常见解决方式:

方式一:修改Quiz组件的参数类型(推荐)

如果Quiz是你自己实现的组件,直接把answerQuestion的参数类型明确为void Function(int),这样就能直接传递_answerQuestion:

class Quiz extends StatelessWidget {
  // 将参数类型从dynamic Function(dynamic)改为void Function(int)
  final void Function(int) answerQuestion;
  final int questionIndex;
  final List<Map<String, Object>> questions;

  const Quiz({
    super.key,
    required this.answerQuestion,
    required this.questionIndex,
    required this.questions,
  });

  // 组件其他代码...
}

修改后,原有的调用代码不需要改动,就能正常运行。

方式二:适配现有函数签名

如果无法修改Quiz组件(比如是第三方库组件),可以通过包装函数的方式,把_answerQuestion适配成符合要求的签名:

简单适配(假设传入的参数一定是int)

Quiz(
  answerQuestion: (dynamic score) => _answerQuestion(score as int),
  questionIndex: _questionIndex,
  questions: _questions,
)

严谨适配(处理类型异常)

如果不确定传入的参数类型,可添加类型检查避免运行时错误:

Quiz(
  answerQuestion: (dynamic value) {
    if (value is int) {
      _answerQuestion(value);
    } else {
      // 可选:添加错误处理逻辑,比如日志打印
      print('参数类型错误,期望int,实际得到${value.runtimeType}');
    }
  },
  questionIndex: _questionIndex,
  questions: _questions,
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:48:14