戻る挙動を決定的にする

どの端末でも同じ順序で戻る処理を実行できるよう、優先順位を明示して実装します。

オーバーレイ優先

まずoverlayを閉じ、その後にページpopを行います。

root判定

ページ数が1の場合は無理にpopせず、親の処理へ委譲します。

タブ対応

タブ構成では先頭タブ復帰後に onBackAtRoot を呼ぶ流れに統一します。

BackScopeパターン

DeclarativePagesBackScope と canPopTop を組み合わせて戻る順序を固定します。

戻るポリシー

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ジェスチャーの差を吸収するには 戻る順序を1つに固定 するのが有効です。