Skip to content

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

Description

@abc873693

背景

目前 HomePageScaffold 以 Drawer(側邊欄) 作為主要導航,底部 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 行為

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions