Skip to content

feat: 支援 Telegram 風格底部固定 Tab 導航(IndexedStack) #178

Description

@abc873693

背景

目前 HomePageScaffoldDrawer(側邊欄) 作為主要導航,底部 NavigationBar 的項目點擊後會以 Navigator.push 推出新頁面。

這與現代 App(如 Telegram、Instagram)的底部 Tab 導航體驗有明顯落差:

  • 切換 Tab 後狀態不保留
  • 功能入口深藏在 Drawer 的巢狀展開選單
  • 返回鍵會離開 Tab,而非回到上一層

Image

目標

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 行為

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions