Home > other >  Flutter, bug in classes
Flutter, bug in classes

Time:07-11

In main.dart I call Quiz's function getQuestionText and getQuestionAnswer, getQuestionText works as expected but the other doesn't work, if returns me always the first result of the list. I just placed a debugPrint() and as expected getQuestionText() prints the correct number, getQuestionAnswer() always print 0, how is that possible?

class Quiz {
  int _questionNumber = 0;

  List<Question> _questions = [
    Question('Some cats are actually allergic to humans', true),
    Question('You can lead a cow down stairs but not up stairs.', false),
  ];

  void nextQuestion() {
    if (_questionNumber < _questions.length - 1) {
      _questionNumber  ;
    }
  }

  String getQuestionText() {
    print('$_questionNumber'); // <-- print the correct number
    return _questions[_questionNumber].questionText;
  }

  bool getQuestionAnswer() {
    print('$_questionNumber'); // <-- always print 0
    return _questions[_questionNumber].questionAnswer;
  }
}

Here how I call the functions

void checkAnswer(bool userAnswer) {
    bool correctAnswer = Quiz().getQuestionAnswer();

    setState(() {

      if (userAnswer == correctAnswer) {
        // right answer
      } else {
          // wrong pick
        );
      }
      quiz.nextQuestion();
      
    });
  }

CodePudding user response:

The problem is that you always create a fresh instance of your class Quiz by calling bool correctAnswer = Quiz().getQuestionAnswer(); inside checkAnswer().

Try to store the Quiz instance ouside:

const myQuiz = Quiz();

void checkAnswer(bool userAnswer) {
  bool correctAnswer = myQuiz.getQuestionAnswer();

  setState(() {
    if (userAnswer == correctAnswer) {
      // right answer
    } else {
      // wrong pick
    }

    myQuiz.nextQuestion();
  });
}
  • Related