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

