This commit is contained in:
sion
2026-03-25 00:47:37 +08:00
parent 2f612fd899
commit c02eca2999
6 changed files with 74 additions and 75 deletions

View File

@@ -62,13 +62,11 @@ class MyApp extends StatelessWidget {
providers: _buildProviders(),
child: Consumer<ThemeProvider>(
builder: (context, themeProvider, _) {
return AuthNavigator(
child: ShadApp.custom(
themeMode: themeProvider.themeMode,
theme: createLightShadTheme(),
darkTheme: createDarkShadTheme(),
appBuilder: _buildMaterialApp,
),
return ShadApp.custom(
themeMode: themeProvider.themeMode,
theme: createLightShadTheme(),
darkTheme: createDarkShadTheme(),
appBuilder: _buildMaterialApp,
);
},
),
@@ -134,55 +132,3 @@ class MyApp extends StatelessWidget {
);
}
}
/// 认证路由守卫 - 监听认证状态并自动导航
class AuthNavigator extends StatefulWidget {
final Widget child;
const AuthNavigator({super.key, required this.child});
@override
State<AuthNavigator> createState() => _AuthNavigatorState();
}
class _AuthNavigatorState extends State<AuthNavigator> {
bool? _wasLoggedIn;
@override
void didChangeDependencies() {
super.didChangeDependencies();
final isLoggedIn = context.watch<AuthProvider>().isLoggedIn;
if (_wasLoggedIn == null) {
_wasLoggedIn = isLoggedIn;
return;
}
if (_wasLoggedIn != isLoggedIn) {
_wasLoggedIn = isLoggedIn;
_navigateToAuthPage(isLoggedIn);
}
}
void _navigateToAuthPage(bool isLoggedIn) {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (!mounted) return;
// 退出登录时重置其他 Provider 的状态
if (!isLoggedIn) {
context.read<AssetProvider>().resetLoadState();
context.read<MarketProvider>().resetLoadState();
}
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (_) => isLoggedIn ? const MainPage() : const LoginPage(),
),
(route) => false,
);
});
}
@override
Widget build(BuildContext context) => widget.child;
}

View File

@@ -389,7 +389,7 @@ class _AssetCard extends StatelessWidget {
}
}
/// 代币列表
/// 资产列表
class _TokenList extends StatelessWidget {
final List holdings;
@@ -399,11 +399,22 @@ class _TokenList extends StatelessWidget {
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
// 对持仓进行排序USDT 放在最上面
final sortedHoldings = List.from(holdings);
sortedHoldings.sort((a, b) {
final codeA = (a.coinCode ?? a['coinCode'] ?? '').toString().toUpperCase();
final codeB = (b.coinCode ?? b['coinCode'] ?? '').toString().toUpperCase();
// USDT 排在最前面
if (codeA == 'USDT') return -1;
if (codeB == 'USDT') return 1;
return 0;
});
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'代币列表',
'资产列表',
style: GoogleFonts.spaceGrotesk(
fontSize: 16,
fontWeight: FontWeight.bold,
@@ -411,18 +422,18 @@ class _TokenList extends StatelessWidget {
),
),
SizedBox(height: AppSpacing.md),
if (holdings.isEmpty)
if (sortedHoldings.isEmpty)
_EmptyState(icon: LucideIcons.wallet, message: '暂无持仓')
else
ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: holdings.length,
itemCount: sortedHoldings.length,
separatorBuilder: (_, __) => Divider(
height: 1,
color: colorScheme.outlineVariant.withOpacity(0.2),
),
itemBuilder: (context, index) => _TokenItem(holding: holdings[index]),
itemBuilder: (context, index) => _TokenItem(holding: sortedHoldings[index]),
),
],
);

View File

@@ -176,10 +176,8 @@ class _LoginPageState extends State<LoginPage> {
}
void _navigateToMainPage() {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (_) => const MainPage()),
(route) => false,
);
// 不使用 Navigator,让 main.dart 中的 Consumer<AuthProvider> 自动处理页面切换
// 登录成功后auth.isLoggedIn 会变为 trueConsumer 会自动显示 MainPage
}
void _navigateToRegister() {