#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
likeonPressed: _press,
(обратите внимание, что скобок нет, так как функция не вызывается, а просто передается).
Комментарии:
1. Большое спасибо, что это было очень полезно для меня..