This commit is contained in:
sion
2026-04-07 01:05:05 +08:00
parent edad10ff06
commit 5ca1274607
83 changed files with 1561 additions and 1241 deletions

View File

@@ -12,7 +12,7 @@ import '../trade/trade_page.dart';
import '../asset/asset_page.dart';
import '../mine/mine_page.dart';
/// 底部导航项
/// 底部導航項
class _NavItem {
final String label;
final IconData icon;
@@ -20,7 +20,7 @@ class _NavItem {
const _NavItem({required this.label, required this.icon});
}
/// 主面 - "The Kinetic Vault" 设计风
/// 主面 - "The Kinetic Vault" 設計風
class MainPage extends StatefulWidget {
const MainPage({super.key});
@@ -31,10 +31,10 @@ class MainPage extends StatefulWidget {
class MainPageState extends State<MainPage> {
int _currentIndex = 0;
final Set<int> _loadedPages = {0};
String? _tradeCoinCode; // 交易页面选中的币种代码
String? _tradeCoinCode; // 交易頁面選中的幣種代碼
late final List<Widget> _pages;
// 防抖:记录上次刷新时间,同一 Tab 500ms 不重刷新
// 防抖:記錄上次刷新時間,同一 Tab 500ms 不重刷新
final Map<int, DateTime> _lastRefreshTime = {};
@override
@@ -55,13 +55,13 @@ class MainPageState extends State<MainPage> {
_currentIndex = index;
_loadedPages.add(index);
});
// 切到已加的 Tab 刷新数据
// 切到已加的 Tab 刷新數據
if (wasLoaded) {
_refreshTab(index);
}
}
/// 刷新对应 Tab 的数据(带防抖)
/// 刷新對應 Tab 的數據(帶防抖)
void _refreshTab(int index) {
final now = DateTime.now();
final last = _lastRefreshTime[index];
@@ -69,30 +69,33 @@ class MainPageState extends State<MainPage> {
_lastRefreshTime[index] = now;
switch (index) {
case 0: // 首 - 刷新资产概览
case 0: // 首 - 刷新資產概覽
context.read<AssetProvider>().loadOverview(force: true);
break;
case 1: // 行情 - 刷新币种列表
case 1: // 行情 - 刷新幣種列表
context.read<MarketProvider>().loadCoins(force: true);
break;
case 3: // 资产 - 刷新全部资产
case 3: // 資產 - 刷新全部資產
context.read<AssetProvider>().refreshAll(force: true);
break;
}
}
/// 切到交易页面并选中指定币种
/// 切到交易頁面並選中指定幣種
void switchToTrade(String coinCode) {
setState(() {
_tradeCoinCode = coinCode;
_currentIndex = 2; // 交易面索引
_currentIndex = 2; // 交易面索引
_loadedPages.add(2);
// 重新建交易页面
_pages[2] = TradePage(initialCoinCode: _tradeCoinCode);
// 重新建交易頁面(用 Key 強制創建新 State
_pages[2] = TradePage(
key: ValueKey(_tradeCoinCode),
initialCoinCode: _tradeCoinCode,
);
});
}
/// 切到指定 tab
/// 切到指定 tab
void switchToTab(int index) {
setState(() {
_currentIndex = index;
@@ -101,10 +104,10 @@ class MainPageState extends State<MainPage> {
}
static const _navItems = [
_NavItem(label: '', icon: LucideIcons.house),
_NavItem(label: '', icon: LucideIcons.house),
_NavItem(label: '行情', icon: LucideIcons.trendingUp),
_NavItem(label: '交易', icon: LucideIcons.arrowLeftRight),
_NavItem(label: '资产', icon: LucideIcons.wallet),
_NavItem(label: '資產', icon: LucideIcons.wallet),
_NavItem(label: '我的', icon: LucideIcons.user),
];
@@ -128,7 +131,7 @@ class MainPageState extends State<MainPage> {
}
}
/// 底部导航栏 - 专业信任主
/// 底部導航欄 - 專業信任主
class _BottomNavBar extends StatelessWidget {
final List<_NavItem> items;
final int currentIndex;
@@ -175,7 +178,7 @@ class _BottomNavBar extends StatelessWidget {
}
}
/// 导航项组
/// 導航項組
class _NavItemWidget extends StatelessWidget {
final _NavItem item;
final bool isSelected;
@@ -220,7 +223,7 @@ class _NavItemWidget extends StatelessWidget {
}
}
/// 懒加载 IndexedStack - 只渲染已访问过的页
/// 懶加載 IndexedStack - 只渲染已訪問過的頁
class LazyIndexedStack extends StatefulWidget {
final int index;
final Set<int> loadedIndexes;