簡體   English   中英

我正在嘗試制作一個測驗應用程序以在 Flutter 和 Dart 中進行培訓,並希望能幫助我清除以下錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM