未降级Dart版本的Flutter项目函数类型不匹配及参数错误求助
解决Dart不降级时的Flutter函数类型错误
你遇到的两个错误本质是函数参数类型不匹配导致的,以下是针对性的修复方案:
错误原因分析
- 参数类型不匹配:
_answerQuestion是需要接收int类型参数的函数,但Quiz类中定义的answerQuestion参数是无参的VoidCallback类型,导致无法直接赋值。 - 传参数量不匹配:因为
answerQuestion被定义为无参函数,调用时传入answer["score"]自然会提示“位置参数过多”。
修复步骤
1. 修改Quiz类的函数参数类型
在quiz.dart中,将answerQuestion的类型从VoidCallback改为接受int参数的函数类型:
class Quiz extends StatelessWidget { final List<Map<String, Object>> questions; // 替换VoidCallback为带int参数的函数类型 final void Function(int) answerQuestion; dynamic questionIndex; Quiz( {required this.questions, required this.answerQuestion, required this.questionIndex, super.key}); @override Widget build(BuildContext context) { return Column( children: [ Question(questions[questionIndex]["question"] as String), ...(questions[questionIndex]["answers"] as List<Map<String, Object>>) .map( (answer) => Answer( () => answerQuestion(answer["score"] as int), answer["text"] as String, ), ) .toList() ], ); } }
2. 验证其他文件的兼容性
main.dart中的_answerQuestion函数无需修改,现在它的类型void Function(int)可以正确匹配Quiz类的参数要求,之前的类型错误会自动消失。answer.dart中的代码保持不变即可,因为Answer组件接收的是无参的VoidCallback,我们通过() => answerQuestion(answer["score"] as int)已经把带参函数包装成了无参回调,符合要求。
修复后,两个错误都会被解决,无需降级Dart版本即可正常运行。
内容的提问来源于stack exchange,提问作者mjj
相关产品推荐
相关产品推荐

