Как заменить анимированную страницу на Навигатор 2.0?

#flutter #dart #flutter-navigation #flutter-widget

Вопрос:

Я перехожу на другую страницу, изменив элемент в pages коллекции.

 final page = ...
return Scaffold(
            body: Navigator(
              onPopPage: (Route<dynamic> route, dynamic result) {
                return route.didPop(result);
              },
              pages: [
                MaterialPage(child: page),
              ],
            ),
...
 

И в этом случае анимации перехода нет (по крайней мере, на IOS). Когда я добавляю страницу в коллекцию — присутствует анимация. Но мне не нужна стопка страниц. Как это исправить?

Ответ №1:

Измените key параметр при изменении страницы.

Пример:

 final page = condition 
  ? MaterialPage(key: ValueKey('page1'), child: page1)
  : MaterialPage(key: ValueKey('page2'), child: page2);

return Scaffold(
            body: Navigator(
              onPopPage: (Route<dynamic> route, dynamic result) {
                return route.didPop(result);
              },
              pages: [
                page,
              ],
            ),