我正在尝试制作一个用于 Flutter 和 Dart 培训的测验应用程序,并且希望能够帮助您清除以下错误

问题描述 投票:0回答:6

我收到两个错误,一个在 Quiz.dart 中,另一个在 Main.dart 中。

在 main.dart 中,我在 answerQuestion: _answerQuestion,

上收到错误

错误:[参数类型“void Function(int)”无法分配给参数类型“void Function()”。]

Main.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']),

上收到错误

错误:位置参数太多:预期为 0,但找到了 1。 尝试删除多余的参数。

测验.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()
      ],
    );
  }
}

我已尽力理解该错误,非常感谢您的帮助,提前致谢。

flutter dart
6个回答
2
投票

void _answerQuestion
函数需要一个
int
参数值,但类
Quiz
声明
final VoidCallback answerQuestion
并且
VoidCallback
类型的函数不需要任何类型的参数。

这就是为什么您收到参数类型“void Function(int)”无法分配给参数类型“void Function()”错误消息。 您可以使用

typedef
关键字定义自己的类型,或使用 flutter Foundation 中的
ValueSetter
VoidCallback

typedef MyOwnFunction = void Function(int score);
class Quiz extends StatelessWidget {
    //...
    final MyOwnFunction answerQuestion;
    //...
}

或者只是在

VoidCallback answerQuestion
类中将
ValueSetter<int> answerQuestion
替换为
Quiz


1
投票

我有同样的问题,但我纠正了它。 你应该改变

final VoidCallback answerQuestion;

final Function  answerQuestion;

有效


0
投票

VoidCallback
void Function()
原型,但您传递给
answerQuestion
void Function(int)
。例如,使用
ValueSetter<int>

关于第二个错误,请检查如何将参数传递给

Answer
构造函数。我认为您已经命名了参数(它们用弯括号括起来),但您将它们作为位置传递。


0
投票

有同样的问题,只需更改:

  •  final VoidCallback answerQuestion;
  •  final Function answerQuestion;
    它对我来说就像一种魅力

0
投票

对我来说有同样的问题:

class Quiz extends StatelessWidget {
  final List<Map<String, Object>> fragen;
  final int frageIndex;
  final Function() antwortFrage;

解决方案是从以下位置移除护腕:

final Function antwortFrage;

0
投票

相同的代码,但有这个(参数类型“void Function(int)”不能分配给参数类型“void Function()”。dartargument_type_not_assignable void _answerques(int 分数) 包:practice/main.dart)但请对要应用的解决方案提供任何帮助

© www.soinside.com 2019 - 2024. All rights reserved.