Детерминированное поведение возврата

Задайте единую политику возврата, чтобы закрытие оверлеев и pop-операции стека всегда происходили в одном и том же порядке.

Сначала оверлеи

Закрывайте активные оверлеи перед pop-операциями стека страниц.

С учётом корня

Когда длина стека равна одному, делегируйте поведение родителю вместо принудительного pop.

С учётом вкладок

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

Паттерн обработки возврата

Используйте DeclarativePagesBackScope для стеков страниц и callback-функции вкладок для корней вкладок.

Политика возврата

DeclarativePagesBackScope

return DeclarativePagesBackScope(
  pages: _pages,
  popTopPage: _popTop,
  isOverlayVisible: _overlay != null,
  dismissOverlay: _dismissOverlay,
  onBackAtRoot: _onBackAtRoot,
  child: DeclarativePagesNavigator(
    pages: _pages,
    buildPage: _buildPage,
    onPopTop: _popTop,
    canPopTop: () => _overlay == null,
  ),
);
UX-стабильность

Сохраняйте один последовательный порядок для всех событий возврата чтобы избежать путаницы пользователей между системной кнопкой Android «Назад» и жестами iOS.