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

Flutter报错:'void Function(int)'无法赋值给'void Function()'参数

问题定位与解决

错误根源

报错'void Function(int)'无法赋值给参数类型'void Function()'的核心是函数类型不匹配:

  • 你定义的_answerQuestion是需要接收一个int类型参数的函数;
  • 但Quiz组件中声明的answerQuestion参数类型是VoidCallback(即无参数的void Function()),导致传入带参函数时类型不兼容。

修复步骤

1. 修改Quiz组件的函数参数类型

将Quiz类中answerQuestion的类型从VoidCallback改为void Function(int),确保与_answerQuestion的类型一致:

import 'package:flutter/material.dart';
import './Answer.dart';
import './question.dart';

class Quiz extends StatelessWidget {
  final List<Map<String, Object>> questions;
  // 替换VoidCallback为带int参数的函数类型
  final void Function(int) answerQuestion;
  final int questionIndex;

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

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Question(
          questions[questionIndex]['questionText'] as String,
        ),
        ...(questions[questionIndex]['answers'] as List<Map<String, Object>>)
            .map((answer) {
          return Answer(
              // 对score进行强转,避免类型不安全问题
              () => answerQuestion(answer['score'] as int), 
              answer['text'] as String);
        }).toList()
      ],
    );
  }
}

2. 确认调用处的类型匹配

修改后,调用Quiz时传入的_answerQuestion(void Function(int)类型)与组件参数类型完全匹配,原报错位置的类型冲突会自动解决。

额外提示

原代码中print("We have more qiestions");存在拼写错误,建议改为print("We have more questions");,避免后续阅读或维护时的混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:27:34