Я пытаюсь создать приложение для викторины в flutter с руководством geeks for geeks в качестве ссылки.. у меня есть следующие ошибки

#flutter #listview

#flutter #listview

Вопрос:

Я следовал всему руководству слово в слово, вот ссылка: https://www.geeksforgeeks.org/basic-quiz-app-in-flutter-api /

У меня две ошибки

один в основном:

Result(_totalScore, _resetQuiz(context)) в этой строке говорится:

Это выражение имеет тип ‘void’, поэтому его значение нельзя использовать. Попробуйте проверить, используете ли вы правильный API; может быть функция или вызов, которые возвращают void, которого вы не ожидали. Кроме того, проверьте параметры и переменные типа, которые также могут быть недействительными.

 import 'package:flutter/rendering.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> {
  final _questions = const [
    {
      'questionText': '1. ABC?',
      'answers': [
        {'text': 'E', 'score': 0},
        {'text': 'F', 'score': 0},
        {'text': 'D', 'score': 1},
        {'text': 'S', 'score': 0},
      ],
    },
    {
      'questionText': '1. ABC?',
      'answers': [
        {'text': 'E', 'score': 0},
        {'text': 'F', 'score': 0},
        {'text': 'D', 'score': 1},
        {'text': 'S', 'score': 0},
      ],
    },
    {
      'questionText': '1. ABC?',
      'answers': [
        {'text': 'E', 'score': 0},
        {'text': 'F', 'score': 0},
        {'text': 'D', 'score': 1},
        {'text': 'S', 'score': 0},
      ],
    },
    {
      'questionText': '1. ABC?',
      'answers': [
        {'text': 'E', 'score': 0},
        {'text': 'F', 'score': 0},
        {'text': 'D', 'score': 1},
        {'text': 'S', 'score': 0},
      ],
    },
  ];

  var _questionIndex = 0;
  var _totalScore = 0;

  void _resetQuiz(BuildContext context) {
    setState(() {
      _questionIndex = 0;
      _totalScore = 0;
    });
  }

  void _answerQuestion(int score) {
    _totalScore  = score;

    setState(() {
      _questionIndex = _questionIndex   1;
    });
    print(_questionIndex);
    if (_questionIndex < _questions.length) {
      print('We have more questions!');
    } else {
      print('No More Questions :(');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Quiz'),
          backgroundColor: Colors.black,
        ),
        body: Padding(
          padding: const EdgeInsets.all(30.0),
          child: _questionIndex < _questions.length
              ? Quiz(
                  answerQuestion: _answerQuestion,
                  questionIndex: _questionIndex,
                  questions: _questions,
                )
              : Result(_totalScore, _resetQuiz(context)),
        ),
      ),
      debugShowCheckedModeBanner: false,
    );
  }
}
 

одна ошибка в quiz.dart

в следующей строке: (questions[questionIndex]['answers']) as List<Map<String, Object>>)

 import './answers.dart';
import './questions.dart';

class Quiz extends StatelessWidget {
  final List<Map<String, Object>> questions;
  final int questionIndex;
  final Function 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<Map<String, Object>>)
              .map((answer)
              {
                return Answer(()=> answerQuestion(answer['score']), answer['text']
                );
              }).toList()
      ],
      );
  }
}
 

ошибки: тип элемента ‘Map<String, Object>’ не может быть присвоен типу списка ‘Widget’.

Ответ №1:

Первая ошибка: вы должны сделать это так Result(_totalScore, _resetQuiz) , вам не нужно добавлять параметр, потому что вы передаете функцию, чтобы не вызывать саму функцию.

Вторая ошибка: это опечатка ...(questions[questionIndex]['answers'] as List<Map<String, Object>>)

Ответ №2:

Для первого метода результата ошибки вместо виджета возвращается void. Проверьте функцию еще раз. Возможно, вам не хватает инструкции return. То же самое со второй ошибкой. Вместо возврата виджета метод возвращает map<string, object> . Если этот объект является виджетом, попробуйте получить к нему доступ, используя [«имя объекта»].

Комментарии:

1. о, хорошо! я попробую это. Спасибо!