style: 完成前端专业金融风格优化

- 主题配色: 黑金传奇(暗) + 白金殿堂(亮)
- 底部导航: 去掉毛玻璃,简洁专业
- 交易页面: 明亮模式颜色优化,实心按钮
- 按钮圆角: xxl(24px) → lg(12px)/md(8px)
- 字体系统: Inter(币安同款)
- 整体风格: 专业金融科技
This commit is contained in:
2026-03-30 03:31:42 +08:00
parent f32c48900b
commit 8825fe5b27
7 changed files with 10898 additions and 10903 deletions

View File

@@ -265,6 +265,7 @@ class _TradePageState extends State<TradePage>
void _showResultDialog(bool success, String title, String message) {
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
showShadDialog(
context: context,
builder: (ctx) => ShadDialog.alert(
@@ -272,7 +273,9 @@ class _TradePageState extends State<TradePage>
children: [
NeonIcon(
icon: success ? Icons.check_circle : Icons.error,
color: success ? AppColorScheme.up : colorScheme.error,
color: success
? AppColorScheme.getUpColor(isDark)
: colorScheme.error,
size: 24,
),
SizedBox(width: AppSpacing.sm),
@@ -310,12 +313,15 @@ class _ConfirmDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
final actionColor = isBuy ? AppColorScheme.up : AppColorScheme.down;
final isDark = Theme.of(context).brightness == Brightness.dark;
final actionColor = isBuy
? AppColorScheme.getUpColor(isDark)
: AppColorScheme.getDownColor(isDark);
return Dialog(
backgroundColor: Colors.transparent,
child: GlassPanel(
borderRadius: BorderRadius.circular(AppRadius.xxl),
borderRadius: BorderRadius.circular(AppRadius.lg),
padding: EdgeInsets.all(AppSpacing.lg),
child: Column(
mainAxisSize: MainAxisSize.min,
@@ -510,8 +516,11 @@ class _CoinSelector extends StatelessWidget {
Widget _buildCoinItem(
Coin coin, BuildContext context, BuildContext sheetContext) {
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
final isSelected = selectedCoin?.code == coin.code;
final changeColor = coin.isUp ? AppColorScheme.up : AppColorScheme.down;
final changeColor = coin.isUp
? AppColorScheme.getUpColor(isDark)
: AppColorScheme.getDownColor(isDark);
return GestureDetector(
onTap: () {
@@ -762,8 +771,11 @@ class _TradeFormCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
final isBuy = tradeType == 0;
final actionColor = isBuy ? AppColorScheme.up : AppColorScheme.down;
final actionColor = isBuy
? AppColorScheme.getUpColor(isDark)
: AppColorScheme.getDownColor(isDark);
return GlassPanel(
padding: EdgeInsets.all(AppSpacing.lg),
@@ -784,7 +796,7 @@ class _TradeFormCard extends StatelessWidget {
context: context,
label: '买入',
isActive: isBuy,
color: AppColorScheme.up,
color: AppColorScheme.buyButtonFill,
icon: LucideIcons.trendingUp,
onTap: () => onTradeTypeChanged(0),
),
@@ -795,7 +807,7 @@ class _TradeFormCard extends StatelessWidget {
context: context,
label: '卖出',
isActive: !isBuy,
color: AppColorScheme.down,
color: AppColorScheme.sellButtonFill,
icon: LucideIcons.trendingDown,
onTap: () => onTradeTypeChanged(1),
),
@@ -919,7 +931,7 @@ class _TradeFormCard extends StatelessWidget {
);
}
/// 买入/卖出切换按钮 - 实心填充 + 图标 + 光效
/// 买入/卖出切换按钮 - 实心填充 + 图标
Widget _buildTypeButton({
required BuildContext context,
required String label,
@@ -937,15 +949,6 @@ class _TradeFormCard extends StatelessWidget {
decoration: BoxDecoration(
color: isActive ? color : Colors.transparent,
borderRadius: BorderRadius.circular(AppRadius.lg),
boxShadow: isActive
? [
BoxShadow(
color: color.withOpacity(0.35),
blurRadius: 16,
offset: const Offset(0, 4),
),
]
: null,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
@@ -1015,11 +1018,8 @@ class _TradeButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
final colorScheme = Theme.of(context).colorScheme;
final isDark = Theme.of(context).brightness == Brightness.dark;
final actionColor = isBuy ? AppColorScheme.up : AppColorScheme.down;
final gradient = isBuy
? AppColorScheme.getBuyGradient(isDark)
: AppColorScheme.sellGradient;
final fillColor =
isBuy ? AppColorScheme.buyButtonFill : AppColorScheme.sellButtonFill;
return GestureDetector(
onTap: enabled ? onPressed : null,
@@ -1027,29 +1027,17 @@ class _TradeButton extends StatelessWidget {
duration: const Duration(milliseconds: 200),
height: 52,
decoration: BoxDecoration(
gradient: enabled ? gradient : null,
color: enabled ? null : colorScheme.onSurface.withOpacity(0.08),
borderRadius: BorderRadius.circular(AppRadius.xxl),
boxShadow: enabled
? [
BoxShadow(
color: actionColor.withOpacity(isDark ? 0.25 : 0.15),
blurRadius: 20,
offset: const Offset(0, 4),
),
]
: null,
color: enabled ? fillColor : colorScheme.onSurface.withOpacity(0.08),
borderRadius: BorderRadius.circular(AppRadius.lg),
),
child: Center(
child: isLoading
? SizedBox(
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
strokeWidth: 2,
color: isBuy
? AppColorScheme.darkOnTertiary
: Colors.white,
color: Colors.white,
),
)
: Row(
@@ -1059,9 +1047,7 @@ class _TradeButton extends StatelessWidget {
isBuy ? LucideIcons.trendingUp : LucideIcons.trendingDown,
size: 16,
color: enabled
? (isBuy
? AppColorScheme.darkOnTertiary
: Colors.white)
? Colors.white
: colorScheme.onSurface.withOpacity(0.3),
),
SizedBox(width: AppSpacing.xs),
@@ -1071,9 +1057,7 @@ class _TradeButton extends StatelessWidget {
fontSize: 16,
fontWeight: FontWeight.w700,
color: enabled
? (isBuy
? AppColorScheme.darkOnTertiary
: Colors.white)
? Colors.white
: colorScheme.onSurface.withOpacity(0.3),
letterSpacing: 0.5,
),