シリアライズしやすい
ナビゲーション状態がプレーンデータになるため、ログ/再現が容易です。
明示的な分岐
page.key のswitchで画面遷移が可視化されます。
単一責任
push/pop 相当は _pages の更新として統一できます。
リゾルバの基本形
画面生成とページリスト更新を、同じ状態管理レイヤーに集約します。
ページ更新ルール
リゾルバ例
Widget _buildPage(BuildContext context, PageEntry page) {
switch (page.key) {
case 'home':
return HomePage(onGoDetail: _goDetail);
case 'detail':
return const DetailPage();
default:
return const SizedBox.shrink();
}
}
void _goDetail() {
setState(() => _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')]);
}
メタデータを薄く保つ
ナビゲーション状態に Widgetインスタンスを入れない ことで、責務分離とテスト容易性を維持できます。