111
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user