'The page property cannot be read when multiple PageViews are attached to the same PageController.Failed assertion: line 184 pos 7:

Iam trying to restart the quiz app but when iam press the restart i have this error message (The page property cannot be read when multiple PageViews are attached to the same PageController.Failed assertion: line 184 pos 7: 'positions.length == 1') iam trying to reset the quiz but this error appear and i called startAgain() method at score page to reset the quiz

// my controller code `

    class ProgParAnimation extends GetxController
  with SingleGetTickerProviderMixin {
    QuestionController controller = Get.put(QuestionController());
  // QuestionController quesCont = Get.put(QuestionController());
   AnimationController _animationController;
   Animation _animation;
  // so that we can access our animation outside
    Animation get animation => this._animation;

  PageController _pageController;
 PageController get pageconroller => _pageController;

  bool _isanswerd = false;
  bool get isanswerd => this._isanswerd;
  int _correctanse;
   int get correctanse => this._correctanse;
  int _selectedAns;
  int get selectedAns => this._selectedAns;
   var _questionNumber = 1.obs;
    RxInt get questionNumber => this._questionNumber;
  int _numOfCorrectAns = 0;
  int get numOfCorrectAns => this._numOfCorrectAns;

  @override
   void onInit() {
      // Our animation duration is 60 s
    // so our plan is to fill the progress bar within 60s
    // with SingleGetTickerProviderMixin for the animation process used with vsync
     _animationController =
      AnimationController(duration: Duration(seconds: 60), vsync: this);
      // update like setState
     _animation = Tween<double>(begin: 0, end: 1).animate(_animationController)
      ..addListener(() => update());
    // start the animation and forwarf to the next page when complete
    _animationController.forward().whenComplete(() {
     nextQuestion();
     });
      // to set the pagecontroller for the page changeing
     _pageController = PageController();

      super.onInit();
    }

       @override
     void onClose() {
     _animationController.dispose();
     _pageController.dispose();

       super.onClose();
     }

     void checkAnswer(int selectIndex, Questions question) {
     _isanswerd = true;
     _correctanse = question.answer;
      _selectedAns = selectIndex;
     if (_correctanse == _selectedAns) {
       _numOfCorrectAns++;
      }
  // to stop the animation after the user check the answer
  _animationController.stop();
   update();
 // Once user select an ans after 3s it will go to the next qn
 Future.delayed(
  Duration(seconds: 3),
     () {
     nextQuestion();
     },
    );
 }

  void nextQuestion() {
   if (_questionNumber.value != controller.question.length) {
     _isanswerd = false;
   _pageController == null
       ? print('error')
        : _pageController.nextPage(
             duration: Duration(seconds: 1), curve: Curves.ease);
         // Reset the counter
      _animationController.reset();
      // Then start it again
       // Once timer is finish go to the next qn so that the oninit only start once
        _animationController.forward().whenComplete(nextQuestion);
      } else {
       Get.to(ScoreScreen());
       }
   }

       void updateQuestion(int index) {
       _questionNumber.value = index + 1;
 }

 void startAgain() {
   _numOfCorrectAns = 0;
 _questionNumber.value = 1;

   nextQuestion();
  update();
 }
  }
`

my restart buttom code

FlatButton(
            child: Text(
              'Again',
              style: Theme.of(context)
                  .textTheme
                  .headline2
                  .copyWith(color: kGrayColor),
            ),
            onPressed: () {
              _controller.startAgain();

              Get.to(QuestionScreen());
            },
          ),

my pageviwe.builder code

Expanded(
                child: PageView.builder(
                  onPageChanged: controller.updateQuestion,
                  physics: NeverScrollableScrollPhysics(),
                  controller: controller.pageconroller,
                  itemBuilder: (ctx, index) => QuestionCard(
                    question: questionController.question[index],
                  ),
                  itemCount: questionController.question.length,
                ),
              ),


Solution 1:[1]

Instead of Get:to(QuestionScree()); ....use.... Navigator.pop(context);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 chuks albert