Как восстановить состояние после нажатия нового экрана - PullRequest
0 голосов
/ 04 марта 2020

Когда я пу sh новый экран на вкладке с навигатором и передать новый конструктор класса, как я могу иметь этот новый экран обновляется каждый раз, когда _playerTimer обновления без необходимости повторного нажатия

Так как состояние из моего нового класса только обновления onTap, пожалуйста, помогите!

Метод сборки FullScreenDialog вызывается один раз, так как он создается только при нажатии onTap

InkWell(
            onTap: () {
              return Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (BuildContext context) => FullScreenDialog(
                        _playerTimer,
                  ));
            },
            child: VideoPlayer(
                        _controller,)
          );

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Когда вы создаете новый класс (в вашем коде это будет FullScreenDialog ), передавая атрибут, вы только говорите своему коду, что новый класс будет инициализирован используя предоставленный вами аргумент.

Если вы хотите, чтобы ваш класс FullScreenDialog всегда обновлялся при изменении _playerTimer , вы должны соблюдать этот атрибут внутри этого класса с помощью setState () , которая является встроенной функцией для StatefulWidgets , которая обновляет пользовательский интерфейс приложений при каждом изменении наблюдаемого атрибута.

Пример :

setState( () {
  _playerTimer = getUpdatedTimer();
});

Предположим, что внутри метода getUpdatedTimer () вы будете управлять logi c для обновления этой переменной, вызова службы или чего-то подобного. Если вы хотите, чтобы эта переменная обновлялась без взаимодействия с интерфейсом, вам, вероятно, также понадобится таймер. Проверьте этот вопрос, чтобы узнать о нем больше.

Если вы начинаете с разработки Flutter, я предлагаю вам прочитать эту статью ( Добавление интерактивности в ваше приложение Flutter ) об управлении состоянием и метод setState документация.

Надеюсь, это поможет.

0 голосов
/ 04 марта 2020

Вы должны использовать setState , чтобы восстановить интерфейс. Например:

setState((){
  _playerTimer = _playerTimer + 1;
});

, это почти вся помощь, которую я могу оказать, не видя остальную часть вашего кода

...