頁面作為資料,UI 透過解析器呈現

只在 PageEntry 中保存中繼資料。使用 buildPage 將每個頁面鍵對應到實際 widget。

可序列化的狀態

PageEntry 是純資料,因此導覽狀態可以記錄、比較,並重新播放。

簡單的解析器

在 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 實例 Widget 實例放入導覽狀態中,並讓 PageEntry 保持為純中繼資料,以利維護。

上一頁

安裝

下一頁

解析器