![](/img/trans.png)
[英]I am trying to make a quiz app in flutter with geeks for geeks tutorial as reference.. i have following errors
[英]I am trying to Make a Quiz app for training in Flutter and Dart, and would appreciate assistance in getting the following error cleared
我在 Quiz.dart 和 Main.dart 中遇到兩個錯誤。
在 main.dart 我在answerQuestion: _answerQuestion上遇到錯誤,
錯誤:[無法將參數類型“void Function(int)”分配給參數類型“void Function()”。]
主.dart
import 'package:flutter/material.dart';
import './quiz.dart';
import './result.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _MyAppState();
}
}
class _MyAppState extends State<MyApp> {
static const _questions = const [
{
'questionText': 'What\'s your favorite Color?',
'answers': [
{'text': 'Red', 'score': 10},
{'text': 'White', 'score': 5},
{'text': 'Black', 'score': 3},
{'text': 'Green', 'score': 1},
],
},
{
'questionText': 'What\'s your favorite animal?',
'answers': [
{'text': 'Dog', 'score': 10},
{'text': 'Cat', 'score': 7},
{'text': 'Monkey', 'score': 5},
{'text': 'Tiger', 'score': 2},
],
},
{
'questionText': 'What\'s your favorite Number',
'answers': [
{'text': 'Raman', 'score': 10},
{'text': 'Krishnan', 'score': 7},
{'text': 'Balan', 'score': 5},
{'text': 'Gopi', 'score': 2},
],
},
];
var _questionIndex = 0;
var _totalScore = 0;
void _answerQuestion(int score) {
_totalScore += score;
setState(() {
_questionIndex = _questionIndex + 1;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My First App'),
),
body: _questionIndex < _questions.length
? Quiz(
answerQuestion: _answerQuestion,
questionIndex: _questionIndex,
questions: _questions,
)
: Result(_totalScore),
));
}
}
在 quiz.dart 我收到answerQuestion(answer['score'])錯誤,
錯誤:位置 arguments 太多:預期為 0,但找到了 1。 嘗試移除額外的 arguments。
測驗.dart
import 'package:flutter/material.dart';
import './answer.dart';
import './question.dart';
class Quiz extends StatelessWidget {
// final List<Map<String, Object>> questions;
final List<Map<String, dynamic>> questions;
final int questionIndex;
final VoidCallback answerQuestion;
Quiz({
required this.questions,
required this.answerQuestion,
required this.questionIndex,
});
@override
Widget build(BuildContext context) {
return Column(
children: [
Question(
questions[questionIndex]['questionText'],
),
// ...(questions[questionIndex]['answers'] as List<String>).map((answer) {
...(questions[questionIndex]['answers'] as List<Map<String, dynamic>>)
.map((answer) {
return Answer(() => answerQuestion(answer['score']), answer['text']);
}).toList()
],
);
}
}
我已盡力了解該錯誤,非常感謝您的幫助,在此先感謝。
void _answerQuestion
function 需要一個int
參數值,但 class Quiz
聲明了final VoidCallback answerQuestion
並且VoidCallback
類型的函數不需要任何類型的參數。
這就是為什么您收到參數類型“void Function(int)”無法分配給參數類型“void Function()”錯誤消息的原因。 您可以使用typedef
關鍵字定義自己的類型,也可以使用ValueSetter
基金會的 ValueSetter 代替VoidCallback
。
typedef MyOwnFunction = void Function(int score);
class Quiz extends StatelessWidget {
//...
final MyOwnFunction answerQuestion;
//...
}
或者只是在Quiz
class VoidCallback answerQuestion
替換為ValueSetter<int> answerQuestion
answerQuestion。
VoidCallback
是一個void Function()
原型,但您將void Function(int)
傳遞給answerQuestion
。 例如,使用ValueSetter<int>
。
關於第二個錯誤檢查如何將參數傳遞給Answer
構造函數。 我認為您已經命名了參數(它們用彎括號括起來),但是您將它們作為位置傳遞。
我有同樣的問題,但我更正了。 您應該更改final VoidCallback answerQuestion;
作為final Function answerQuestion;
有用
有同樣的問題,只需更改:
final VoidCallback answerQuestion;
至final Function answerQuestion;
它對我來說就像一個魅力
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.