背景
目前 HomePageScaffold 以 Drawer(側邊欄) 作為主要導航,底部 NavigationBar 的項目點擊後會以 Navigator.push 推出新頁面。
這與現代 App(如 Telegram、Instagram)的底部 Tab 導航體驗有明顯落差:
- 切換 Tab 後狀態不保留
- 功能入口深藏在 Drawer 的巢狀展開選單
- 返回鍵會離開 Tab,而非回到上一層

目標
讓 HomePageScaffold(或新增對應元件)支援 Telegram 風格的底部固定 Tab 導航:
- 使用
IndexedStack 保留各 Tab 狀態,切換不重建
- 每個 Tab 擁有獨立的
Navigator,支援 Tab 內部頁面堆疊
- 底部
NavigationBar 作為主要導航,Drawer 退為輔助或移除
- 手機版採底部 Tab,桌面/平板版可改用
NavigationRail
提議的 API 方向
HomePageScaffold(
// 現有欄位保留向下相容
tabs: [
HomeTab(
icon: Icon(Icons.home),
label: '首頁',
builder: (_) => HomeContentPage(),
),
HomeTab(
icon: Icon(Icons.school),
label: '課業',
builder: (_) => StudyPage(),
),
// ...
],
)
或透過新增 navigationMode 參數切換行為:
HomePageScaffold(
navigationMode: NavigationMode.bottomTabs, // vs NavigationMode.drawer
...
)
使用情境(來自 NKUST AP)
預期 Tab 結構:
| Tab |
內容 |
| 首頁 |
公告 + 今日課表卡片 |
| 課業 |
課表 / 成績 / 計算學分 / 期中預警 |
| 缺曠 |
申請 / 紀錄 |
| 校車 |
預約 / 記錄(條件顯示) |
| 更多 |
使用者資訊 / 設定 / 關於 |
注意事項
- 需保持向下相容,不破壞既有使用
HomePageScaffold 的專案
- 桌面版(
shortestSide >= 680)建議維持 NavigationRail 或 Drawer 布局
- Android back gesture 應正確處理 Tab 內 Navigator 的 pop 行為
背景
目前
HomePageScaffold以 Drawer(側邊欄) 作為主要導航,底部NavigationBar的項目點擊後會以Navigator.push推出新頁面。這與現代 App(如 Telegram、Instagram)的底部 Tab 導航體驗有明顯落差:
目標
讓
HomePageScaffold(或新增對應元件)支援 Telegram 風格的底部固定 Tab 導航:IndexedStack保留各 Tab 狀態,切換不重建Navigator,支援 Tab 內部頁面堆疊NavigationBar作為主要導航,Drawer 退為輔助或移除NavigationRail提議的 API 方向
或透過新增
navigationMode參數切換行為:使用情境(來自 NKUST AP)
預期 Tab 結構:
注意事項
HomePageScaffold的專案shortestSide >= 680)建議維持NavigationRail或 Drawer 布局