オーバーレイ優先
まず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つに固定 するのが有効です。