Как сохранить выбранную вкладку во флаттере при изменении ориентации? - PullRequest
0 голосов
/ 19 ноября 2018

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

В моем классе State я использую AutomaticKeepAliveClientMixin и установил:

@override
bool get wantKeepAlive => true;

но это, похоже, не имеет никакого эффекта.

Есть ли способ обеспечить сохранение всех состояний моего приложения и виджета при повороте устройства?

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

Спасибо!

1 Ответ

0 голосов
/ 20 ноября 2018

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

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

Реми был прав на деньги с его комментарием.

Полный день кодирования потерян, но многому научился.:-)

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

Все еще изучаю Флаттер, но в целом впечатлен.

...