как перейти на другую страницу в заявлении else в flutter

#flutter

Вопрос:

У меня есть список строк, хранящихся в переменной, подобной этой:

 var question = [  'whats your favorite name',  'whats your favorite color',  'whats your favorite shape', ];  

И есть функция, которая увеличивает переменную каждый раз, когда я ее вызываю

 void _Press(){  setState((){  _PressedNo = _PressedNo   1;  });   print(_PressedNo ); }   

И в моем эшафоте я проверяю if _PressedNo , меньше ли этот список, поэтому он перестраивает эшафот с новым вопросом каждый раз, когда я нажимаю кнопку, пока вопросы не закончатся вот так :

 return MaterialApp(  home: Scaffold(  body:_PressedNo lt; question.length ? Container(   child: RaisedButton(  child: Text('yes'),  onPressed:() {  _Press();  },  ),   ) : // here i want to go to another page  

И после всего остального : я хочу перейти на другую страницу Flutter, но я могу добавлять здесь только виджеты, так что любое решение, как это сделать..

Ответ №1:

Вам придется применить немного другой подход. build Метод должен предоставлять только то, что отображается на экране, а не вызывать непосредственно определенное действие или изменение состояния, например переход на другую страницу.

Вы можете справиться с этим в _Press() методе:

 void _Press() {  if(_PressedNo lt; questions.length) {  setState(() {  _PressedNo = _PressedNo   1;  });  } else {  Navigator.of(context).push(...); // navigate to another page   // optionally set the _PressedNo back to 0  setState(() {   _PressedNo = 0;  });  } }  

Ваш метод сборки не должен меняться, так как на этой странице всегда должна отображаться одна и та же кнопка.

 return MaterialApp(  home: Scaffold(  body: Container(   child: RaisedButton(  child: Text('yes'),  onPressed:() {  _Press();  },  ),   ), );  

Некоторые другие указатели:

  • используйте строчные буквы для функций и переменных: _press() и _pressedNo .
  • Вы можете напрямую передать функцию в onPressed like onPressed: _press, (обратите внимание, что скобок нет, так как функция не вызывается, а просто передается).

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

1. Большое спасибо, что это было очень полезно для меня..