This commit is contained in:
sion
2026-04-21 08:09:45 +08:00
parent 0066615054
commit 5264043c21
1831 changed files with 15376 additions and 39973 deletions

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:lucide_icons_flutter/lucide_icons.dart';
import '../change_password_page.dart';
import '../kyc_page.dart';
import '../welfare_center_page.dart';
import 'menu_group_container.dart';
@@ -56,8 +57,13 @@ class MenuGroup1 extends StatelessWidget {
MenuRow(
icon: LucideIcons.lock,
iconColor: colorScheme.onSurfaceVariant,
title: '安全設置',
onTap: () => onShowComingSoon('安全設置'),
title: '修改密碼',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (_) => const ChangePasswordPage()),
);
},
),
const Divider(height: 1),
MenuRow(

View File

@@ -1,14 +1,13 @@
import 'package:flutter/material.dart';
import 'package:lucide_icons_flutter/lucide_icons.dart';
import '../change_password_page.dart';
import 'menu_group_container.dart';
import 'menu_row.dart';
import 'menu_trailing_widgets.dart';
/// 菜單分組2 - 深色模式 / 系統設置 / 關於我們
/// 菜單分組2 - 深色模式 / 修改密碼
class MenuGroup2 extends StatelessWidget {
final VoidCallback onShowAbout;
const MenuGroup2({super.key, required this.onShowAbout});
const MenuGroup2({super.key});
@override
Widget build(BuildContext context) {
@@ -17,26 +16,19 @@ class MenuGroup2 extends StatelessWidget {
return MenuGroupContainer(
child: Column(
children: [
// 深色模式
const DarkModeRow(),
const Divider(height: 1),
// 系統設置
MenuRow(
icon: LucideIcons.settings,
icon: LucideIcons.lock,
iconColor: colorScheme.onSurfaceVariant,
title: '系統設置',
title: '修改密碼',
onTap: () {
// TODO: 系統設置
Navigator.push(
context,
MaterialPageRoute(builder: (_) => const ChangePasswordPage()),
);
},
),
const Divider(height: 1),
// 關於我們
MenuRow(
icon: LucideIcons.info,
iconColor: colorScheme.onSurfaceVariant,
title: '關於我們',
onTap: onShowAbout,
),
],
),
);

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:lucide_icons_flutter/lucide_icons.dart';
import '../../../../core/theme/app_theme.dart';
import 'avatar_circle.dart';
@@ -41,10 +42,32 @@ class ProfileCard extends StatelessWidget {
),
),
const SizedBox(height: 2),
Text(
'普通用戶',
style: AppTextStyles.bodySmall(context).copyWith(
color: colorScheme.onSurfaceVariant,
GestureDetector(
onTap: () {
Clipboard.setData(ClipboardData(text: '${user?.id ?? ''}'));
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('ID已复制'),
duration: Duration(seconds: 1),
),
);
},
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'ID: ${user?.id ?? ''}',
style: AppTextStyles.bodySmall(context).copyWith(
color: colorScheme.onSurfaceVariant,
),
),
const SizedBox(width: 4),
Icon(
LucideIcons.copy,
size: 12,
color: colorScheme.onSurfaceVariant,
),
],
),
),
],

View File

@@ -3,8 +3,6 @@ import 'package:provider/provider.dart';
import '../../../core/theme/app_theme.dart';
import '../../../core/theme/app_spacing.dart';
import '../../../providers/auth_provider.dart';
import '../auth/login_page.dart';
import 'components/avatar_circle.dart';
import 'components/logout_button.dart';
import 'components/menu_group1.dart';
import 'components/menu_group2.dart';
@@ -48,7 +46,7 @@ class _MinePageState extends State<MinePage>
onShowComingSoon: _showComingSoon,
),
SizedBox(height: AppSpacing.sm),
MenuGroup2(onShowAbout: _showAboutDialog),
const MenuGroup2(),
SizedBox(height: AppSpacing.lg),
LogoutButton(onLogout: () => _handleLogout(auth)),
SizedBox(height: AppSpacing.md),
@@ -76,36 +74,6 @@ class _MinePageState extends State<MinePage>
);
}
void _showAboutDialog() {
showDialog(
context: context,
builder: (ctx) => AlertDialog(
title: Row(
children: [
AvatarCircle(radius: 16, fontSize: 12),
const SizedBox(width: 8),
const Text('模擬所'),
],
),
content: const Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('虛擬貨幣模擬交易平臺'),
SizedBox(height: 8),
Text('版本: 1.0.0'),
],
),
actions: [
TextButton(
onPressed: () => Navigator.of(ctx).pop(),
child: const Text('確定'),
),
],
),
);
}
void _handleLogout(AuthProvider auth) {
final colorScheme = Theme.of(context).colorScheme;
showDialog(
@@ -123,12 +91,6 @@ class _MinePageState extends State<MinePage>
onPressed: () async {
Navigator.of(ctx).pop();
await auth.logout();
if (ctx.mounted) {
Navigator.of(ctx).pushAndRemoveUntil(
MaterialPageRoute(builder: (_) => const LoginPage()),
(route) => false,
);
}
},
child: Text('退出', style: TextStyle(color: colorScheme.error)),

View File

@@ -113,27 +113,15 @@ class _WelfareCenterPageState extends State<WelfareCenterPage> {
required VoidCallback? onPressed,
Color? disabledBackgroundColor,
}) {
return SizedBox(
width: double.infinity,
height: 44,
child: ElevatedButton(
onPressed: onPressed,
style: ElevatedButton.styleFrom(
backgroundColor: backgroundColor,
foregroundColor: foregroundColor,
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppRadius.lg),
),
disabledBackgroundColor:
disabledBackgroundColor ?? backgroundColor.withValues(alpha: 0.3),
disabledForegroundColor: foregroundColor.withValues(alpha: 0.7),
),
return Align(
alignment: Alignment.centerRight,
child: GestureDetector(
onTap: onPressed,
child: Text(
text,
style: AppTextStyles.headlineMedium(context).copyWith(
fontWeight: FontWeight.w700,
color: foregroundColor,
style: AppTextStyles.bodyMedium(context).copyWith(
color: onPressed != null ? backgroundColor : context.colors.onSurfaceVariant,
fontWeight: FontWeight.w500,
),
),
),
@@ -223,35 +211,30 @@ class _WelfareCenterPageState extends State<WelfareCenterPage> {
Text(
referralCode.isEmpty ? '暫無邀請碼' : referralCode,
style: AppTextStyles.displayMedium(context).copyWith(
fontSize: 24, // 明確設置為 24px
fontSize: 22,
fontWeight: FontWeight.w800,
color: goldAccent,
letterSpacing: 2,
letterSpacing: 1.5,
),
overflow: TextOverflow.ellipsis,
maxLines: 1,
),
const SizedBox(height: 16),
SizedBox(
width: double.infinity,
height: 40,
child: ElevatedButton(
onPressed: referralCode.isEmpty
? null
: () {
Clipboard.setData(ClipboardData(text: referralCode));
ToastUtils.showSuccess('邀請碼已複製');
},
style: ElevatedButton.styleFrom(
backgroundColor: goldAccent,
foregroundColor: Theme.of(context).colorScheme.onPrimary,
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppRadius.lg),
),
disabledBackgroundColor: goldAccent.withValues(alpha: 0.4),
),
const SizedBox(height: 12),
Align(
alignment: Alignment.centerRight,
child: GestureDetector(
onTap: referralCode.isEmpty ? null : () {
Clipboard.setData(ClipboardData(text: referralCode));
ToastUtils.showSuccess('邀請碼已複製');
},
child: Text(
'複製邀請碼',
style: AppTextStyles.headlineMedium(context).copyWith(color: Theme.of(context).colorScheme.onPrimary),
style: AppTextStyles.bodyMedium(context).copyWith(
color: referralCode.isEmpty
? context.colors.onSurfaceVariant
: goldAccent,
fontWeight: FontWeight.w500,
),
),
),
),
@@ -826,9 +809,9 @@ class _WelfareCenterPageState extends State<WelfareCenterPage> {
style: AppTextStyles.headlineSmall(context),
),
const SizedBox(height: 8),
_buildRuleItem('新用戶註冊完成實名認證獎勵 100 USDT'),
_buildRuleItem('邀請好友充值每 1000 USDT獎勵 100 USDT'),
_buildRuleItem('好友推廣的充值每 1000 USDT額外獎勵 50 USDT'),
_buildRuleItem('新用戶首次充值完成後可領取 100 USDT(一次性)'),
_buildRuleItem('邀請好友累計充值每滿 1,000 USDT獎勵 100 USDT最多8次/人)'),
_buildRuleItem('好友推廣的用戶充值每滿 1,000 USDT額外獎勵 50 USDT最多8次/人)'),
_buildRuleItem('獎勵直接發放至資金賬戶'),
],
),