繁体   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