From 5ca1274607cacecf29f488a087ddafd12852e52c Mon Sep 17 00:00:00 2001 From: sion Date: Tue, 7 Apr 2026 01:05:05 +0800 Subject: [PATCH] 111 --- ...28829e100ef67db14ea2.cache.dill.track.dill | Bin 88102152 -> 88114392 bytes .../lib/core/constants/api_endpoints.dart | 76 ++--- .../lib/core/event/app_event_bus.dart | 20 +- .../lib/core/network/api_exception.dart | 8 +- .../lib/core/network/api_response.dart | 4 +- .../lib/core/network/dio_client.dart | 48 +-- .../lib/core/storage/local_storage.dart | 34 +-- .../lib/core/theme/app_color_scheme.dart | 96 +++--- .../lib/core/theme/app_spacing.dart | 84 +++--- flutter_monisuo/lib/core/theme/app_theme.dart | 72 ++--- .../lib/core/theme/app_theme_extension.dart | 50 ++-- .../lib/core/utils/toast_utils.dart | 14 +- .../lib/data/models/account_models.dart | 26 +- flutter_monisuo/lib/data/models/coin.dart | 14 +- .../lib/data/models/order_models.dart | 72 ++--- flutter_monisuo/lib/data/models/user.dart | 14 +- .../lib/data/services/asset_service.dart | 26 +- .../lib/data/services/bonus_service.dart | 27 +- .../lib/data/services/fund_service.dart | 22 +- .../lib/data/services/market_service.dart | 14 +- .../lib/data/services/trade_service.dart | 12 +- .../lib/data/services/user_service.dart | 14 +- flutter_monisuo/lib/main.dart | 16 +- .../lib/providers/asset_provider.dart | 58 ++-- .../lib/providers/auth_provider.dart | 32 +- .../lib/providers/market_provider.dart | 14 +- .../lib/providers/theme_provider.dart | 20 +- .../lib/ui/components/asset_card.dart | 38 +-- .../lib/ui/components/coin_card.dart | 16 +- .../lib/ui/components/components.dart | 2 +- .../lib/ui/components/glass_panel.dart | 66 ++--- .../lib/ui/components/gradient_button.dart | 24 +- .../lib/ui/components/neon_glow.dart | 72 ++--- .../lib/ui/components/trade_button.dart | 24 +- .../lib/ui/pages/asset/asset_page.dart | 10 +- .../components/account_tab_switcher.dart | 6 +- .../asset/components/action_buttons_row.dart | 8 +- .../pages/asset/components/asset_dialogs.dart | 84 +++--- .../pages/asset/components/balance_card.dart | 4 +- .../asset/components/holdings_section.dart | 14 +- .../asset/components/records_link_row.dart | 4 +- .../lib/ui/pages/asset/transfer_page.dart | 64 ++-- .../lib/ui/pages/auth/login_page.dart | 44 +-- .../lib/ui/pages/auth/register_page.dart | 94 +++--- .../lib/ui/pages/home/bills_page.dart | 66 ++--- .../lib/ui/pages/home/header_bar.dart | 2 +- .../lib/ui/pages/home/home_page.dart | 58 ++-- .../lib/ui/pages/home/hot_coins_section.dart | 4 +- .../ui/pages/home/profit_analysis_page.dart | 34 +-- .../lib/ui/pages/home/quick_actions_row.dart | 12 +- .../lib/ui/pages/main/main_page.dart | 41 +-- .../lib/ui/pages/market/market_page.dart | 72 ++--- .../mine/components/about_dialog_helpers.dart | 2 +- .../pages/mine/components/avatar_circle.dart | 6 +- .../pages/mine/components/logout_button.dart | 4 +- .../ui/pages/mine/components/menu_group1.dart | 20 +- .../ui/pages/mine/components/menu_group2.dart | 12 +- .../mine/components/menu_group_container.dart | 6 +- .../ui/pages/mine/components/menu_row.dart | 4 +- .../components/menu_trailing_widgets.dart | 18 +- .../pages/mine/components/profile_card.dart | 6 +- .../lib/ui/pages/mine/kyc_page.dart | 60 ++-- .../lib/ui/pages/mine/mine_page.dart | 16 +- .../ui/pages/mine/welfare_center_page.dart | 274 ++++++++++++++---- .../ui/pages/onboarding/onboarding_page.dart | 50 ++-- .../lib/ui/pages/orders/fund_order_card.dart | 40 +-- .../lib/ui/pages/orders/fund_orders_list.dart | 32 +- .../lib/ui/pages/orders/fund_orders_page.dart | 60 ++-- .../lib/ui/pages/orders/orders_page.dart | 10 +- .../pages/trade/components/amount_input.dart | 12 +- .../pages/trade/components/coin_avatar.dart | 4 +- .../pages/trade/components/coin_selector.dart | 26 +- .../trade/components/confirm_dialog.dart | 18 +- .../trade/components/placeholder_card.dart | 4 +- .../ui/pages/trade/components/price_card.dart | 16 +- .../pages/trade/components/trade_button.dart | 8 +- .../trade/components/trade_form_card.dart | 40 +-- .../lib/ui/pages/trade/trade_page.dart | 48 +-- .../lib/ui/shared/modern_bottom_sheet.dart | 26 +- .../lib/ui/shared/modern_dialog.dart | 24 +- .../lib/ui/shared/ui_constants.dart | 52 ++-- .../monisuo/controller/BonusController.java | 14 +- .../rattan/monisuo/service/BonusService.java | 140 ++++++++- 83 files changed, 1561 insertions(+), 1241 deletions(-) diff --git a/flutter_monisuo/build/99111e0c5b6228829e100ef67db14ea2.cache.dill.track.dill b/flutter_monisuo/build/99111e0c5b6228829e100ef67db14ea2.cache.dill.track.dill index 00019605dac7610d41ebbe686925b24236109191..6535aa074d0e0c49f8fbaf9b0f5b78d3b9d85dd9 100644 GIT binary patch delta 440312 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

0pK8`jO#1!riJqe^oV+hNG3WPx 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

  • }%<33z6{M2846K6GJGfoF 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

    Tp-Rh%`Eo#!E8JoDS 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ƫJ8c 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�?O3299YPz*Id0vUkz&o%clnHh`&XxyyNPX|P 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�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 GcK$zaM#=F2 diff --git a/flutter_monisuo/lib/core/constants/api_endpoints.dart b/flutter_monisuo/lib/core/constants/api_endpoints.dart index bac0c4e..5ddc91e 100644 --- a/flutter_monisuo/lib/core/constants/api_endpoints.dart +++ b/flutter_monisuo/lib/core/constants/api_endpoints.dart @@ -1,111 +1,111 @@ -/// API 端点配置 +/// API 端點配置 class ApiEndpoints { ApiEndpoints._(); - /// 环境类型 + /// 環境類型 static const String _env = String.fromEnvironment('ENV', defaultValue: 'dev'); - /// 基础URL - 根据环境自动切换 + /// 基礎URL - 根據環境自動切換 static const String baseUrl = _env == 'prod' ? 'http://8.155.172.147:5010' : 'http://localhost:5010'; - /// 是否为生产环境 + /// 是否為生產環境 static const bool isProduction = _env == 'prod'; - // ==================== 用户模块 ==================== + // ==================== 用戶模塊 ==================== - /// 用户登录 + /// 用戶登錄 static const String login = '/api/user/login'; - /// 用户注册 + /// 用戶註冊 static const String register = '/api/user/register'; - /// 获取用户信息 + /// 獲取用戶信息 static const String userInfo = '/api/user/info'; - /// 上传KYC资料 + /// 上傳KYC資料 static const String kyc = '/api/user/kyc'; - /// 获取推广码 + /// 獲取推廣碼 static const String referralCode = '/api/user/referral-code'; - /// 退出登录 + /// 退出登錄 static const String logout = '/api/user/logout'; - // ==================== 行情模块 ==================== + // ==================== 行情模塊 ==================== - /// 获取币种列表 + /// 獲取幣種列表 static const String coinList = '/api/market/list'; - /// 获取币种详情 + /// 獲取幣種詳情 static const String coinDetail = '/api/market/detail'; - /// 搜索币种 + /// 搜索幣種 static const String coinSearch = '/api/market/search'; - // ==================== 交易模块 ==================== + // ==================== 交易模塊 ==================== - /// 买入 + /// 買入 static const String buy = '/api/trade/buy'; - /// 卖出 + /// 賣出 static const String sell = '/api/trade/sell'; - /// 获取交易记录 + /// 獲取交易記錄 static const String tradeOrders = '/api/trade/orders'; - /// 获取订单详情 + /// 獲取訂單詳情 static const String tradeOrderDetail = '/api/trade/order/detail'; - // ==================== 资产模块 ==================== + // ==================== 資產模塊 ==================== - /// 获取资产总览 + /// 獲取資產總覽 static const String assetOverview = '/api/asset/overview'; - /// 获取资金账户 + /// 獲取資金賬戶 static const String fundAccount = '/api/asset/fund'; - /// 获取交易账户 + /// 獲取交易賬戶 static const String tradeAccount = '/api/asset/trade'; - /// 资金划转 + /// 資金劃轉 static const String transfer = '/api/asset/transfer'; - /// 获取资金流水 + /// 獲取資金流水 static const String assetFlow = '/api/asset/flow'; - // ==================== 充提模块 ==================== + // ==================== 充提模塊 ==================== - /// 申请充值 + /// 申請充值 static const String deposit = '/api/fund/deposit'; - /// 确认已打款 + /// 確認已打款 static const String confirmPay = '/api/fund/confirmPay'; - /// 申请提现 + /// 申請提現 static const String withdraw = '/api/fund/withdraw'; - /// 取消订单 + /// 取消訂單 static const String cancelOrder = '/api/fund/cancel'; - /// 获取可用提现网络列表 + /// 獲取可用提現網絡列表 static const String walletNetworks = '/api/wallet/networks'; - /// 获取充提记录 + /// 獲取充提記錄 static const String fundOrders = '/api/fund/orders'; - /// 获取默认钱包地址 + /// 獲取默認錢包地址 static const String defaultWallet = '/api/wallet/default'; - // ==================== 福利模块 ==================== + // ==================== 福利模塊 ==================== - /// 福利中心状态 + /// 福利中心狀態 static const String bonusWelfare = '/api/bonus/welfare'; - /// 领取奖励 + /// 領取獎勵 static const String bonusClaim = '/api/bonus/claim'; - /// 每日盈亏 + /// 每日盈虧 static const String dailyProfit = '/api/asset/daily-profit'; } diff --git a/flutter_monisuo/lib/core/event/app_event_bus.dart b/flutter_monisuo/lib/core/event/app_event_bus.dart index b0bc173..dff8af4 100644 --- a/flutter_monisuo/lib/core/event/app_event_bus.dart +++ b/flutter_monisuo/lib/core/event/app_event_bus.dart @@ -1,15 +1,15 @@ import 'dart:async'; -/// 应用事件类型 +/// 應用事件類型 enum AppEventType { - /// 资产变动(余额、持仓等) + /// 資產變動(餘額、持倉等) assetChanged, - /// 订单变动(充提订单状态变化) + /// 訂單變動(充提訂單狀態變化) orderChanged, } -/// 应用事件 +/// 應用事件 class AppEvent { final AppEventType type; final Map? data; @@ -17,20 +17,20 @@ class AppEvent { const AppEvent(this.type, {this.data}); } -/// 轻量级应用内事件总线 -/// 基于 StreamController.broadcast,零外部依赖 +/// 輕量級應用內事件總線 +/// 基於 StreamController.broadcast,零外部依賴 class AppEventBus { final StreamController _controller = StreamController.broadcast(); - /// 广播事件 + /// 廣播事件 void fire(AppEventType type, {Map? data}) { if (!_controller.isClosed) { _controller.add(AppEvent(type, data: data)); } } - /// 监听指定类型事件 + /// 監聽指定類型事件 StreamSubscription on( AppEventType type, void Function(AppEvent) callback, @@ -40,10 +40,10 @@ class AppEventBus { .listen(callback); } - /// 监听任意事件 + /// 監聽任意事件 Stream get stream => _controller.stream; - /// 销毁 + /// 銷燬 void dispose() { _controller.close(); } diff --git a/flutter_monisuo/lib/core/network/api_exception.dart b/flutter_monisuo/lib/core/network/api_exception.dart index b5f7e62..7d0b2b8 100644 --- a/flutter_monisuo/lib/core/network/api_exception.dart +++ b/flutter_monisuo/lib/core/network/api_exception.dart @@ -1,4 +1,4 @@ -/// API 异常类 +/// API 異常類 class ApiException implements Exception { final String message; final String code; @@ -12,7 +12,7 @@ class ApiException implements Exception { factory ApiException.unauthorized([String? message]) { return ApiException( - message: message ?? '未授权', + message: message ?? '未授權', code: '0002', statusCode: 401, ); @@ -20,14 +20,14 @@ class ApiException implements Exception { factory ApiException.networkError([String? message]) { return ApiException( - message: message ?? '网络错误', + message: message ?? '網絡錯誤', code: 'NETWORK_ERROR', ); } factory ApiException.serverError([String? message]) { return ApiException( - message: message ?? '服务器错误', + message: message ?? '服務器錯誤', code: 'SERVER_ERROR', statusCode: 500, ); diff --git a/flutter_monisuo/lib/core/network/api_response.dart b/flutter_monisuo/lib/core/network/api_response.dart index e2ab927..73b082c 100644 --- a/flutter_monisuo/lib/core/network/api_response.dart +++ b/flutter_monisuo/lib/core/network/api_response.dart @@ -1,11 +1,11 @@ -/// API 响应状态码 +/// API 響應狀態碼 class ResponseCode { static const String success = '0000'; static const String unauthorized = '0002'; static const String kycRequired = 'KYC_REQUIRED'; } -/// API 响应模型 +/// API 響應模型 class ApiResponse { final bool success; final String? message; diff --git a/flutter_monisuo/lib/core/network/dio_client.dart b/flutter_monisuo/lib/core/network/dio_client.dart index 225de44..3441a44 100644 --- a/flutter_monisuo/lib/core/network/dio_client.dart +++ b/flutter_monisuo/lib/core/network/dio_client.dart @@ -5,7 +5,7 @@ import '../storage/local_storage.dart'; import 'api_exception.dart'; import 'api_response.dart'; -/// 网络配置常量 +/// 網絡配置常量 class NetworkConfig { static const String baseUrl = ApiEndpoints.baseUrl; static const Duration connectTimeout = Duration(seconds: 15); @@ -13,11 +13,11 @@ class NetworkConfig { static const Duration sendTimeout = Duration(seconds: 15); } -/// Dio 网络客户端 +/// Dio 網絡客戶端 class DioClient { late final Dio _dio; - /// 未授权回调(token 过期时触发) + /// 未授權回調(token 過期時觸發) VoidCallback? onUnauthorized; DioClient() { @@ -43,7 +43,7 @@ class DioClient { ]); } - /// GET 请求 + /// GET 請求 Future> get( String path, { Map? queryParameters, @@ -57,7 +57,7 @@ class DioClient { } } - /// POST 请求 + /// POST 請求 Future> post( String path, { dynamic data, @@ -71,7 +71,7 @@ class DioClient { } } - /// Multipart 文件上传 + /// Multipart 文件上傳 Future> upload( String path, { required FormData formData, @@ -96,21 +96,21 @@ class DioClient { final data = response.data; if (data is Map) { final apiResponse = ApiResponse.fromJson(data, fromJson); - // 检测业务层未授权(后端返回 HTTP 200 + code "0002") - // 注意:不再自动清除用户数据,避免误判 - // 只有在 HTTP 401 时才清除用户数据 + // 檢測業務層未授權(後端返回 HTTP 200 + code "0002") + // 注意:不再自動清除用戶數據,避免誤判 + // 只有在 HTTP 401 時才清除用戶數據 if (apiResponse.isUnauthorized) { - debugPrint('业务层未授权响应: ${apiResponse.message}'); - // 不再自动调用 onUnauthorized,避免刷新时误判 + debugPrint('業務層未授權響應: ${apiResponse.message}'); + // 不再自動調用 onUnauthorized,避免刷新時誤判 // onUnauthorized?.call(); } return apiResponse; } - return ApiResponse.fail('响应数据格式错误'); + return ApiResponse.fail('響應數據格式錯誤'); } ApiResponse _handleError(DioException e) { - // 详细错误日志 + // 詳細錯誤日誌 debugPrint('=== Network Error ==='); debugPrint('Type: ${e.type}'); debugPrint('Message: ${e.message}'); @@ -122,7 +122,7 @@ class DioClient { if (_isUnauthorized(e)) { _clearUserData(); onUnauthorized?.call(); - return ApiResponse.unauthorized('登录已过期,请重新登录'); + return ApiResponse.unauthorized('登錄已過期,請重新登錄'); } final message = _getErrorMessage(e); @@ -140,28 +140,28 @@ class DioClient { String _getErrorMessage(DioException e) { switch (e.type) { case DioExceptionType.connectionTimeout: - return '连接超时,请检查网络'; + return '連接超時,請檢查網絡'; case DioExceptionType.sendTimeout: - return '发送超时,请重试'; + return '發送超時,請重試'; case DioExceptionType.receiveTimeout: - return '响应超时,请重试'; + return '響應超時,請重試'; case DioExceptionType.connectionError: - return '网络连接失败,请检查网络设置'; + return '網絡連接失敗,請檢查網絡設置'; case DioExceptionType.badResponse: final statusCode = e.response?.statusCode; if (statusCode == 500) { - return '服务器内部错误'; + return '服務器內部錯誤'; } else if (statusCode == 502 || statusCode == 503) { - return '服务暂时不可用'; + return '服務暫時不可用'; } - return '服务器错误 ($statusCode)'; + return '服務器錯誤 ($statusCode)'; default: - return e.message ?? '网络请求失败'; + return e.message ?? '網絡請求失敗'; } } } -/// 日志拦截器 +/// 日誌攔截器 class _LoggingInterceptor extends Interceptor { @override void onRequest(RequestOptions options, RequestInterceptorHandler handler) { @@ -195,7 +195,7 @@ class _LoggingInterceptor extends Interceptor { } } -/// 认证拦截器 +/// 認證攔截器 class _AuthInterceptor extends Interceptor { @override void onRequest(RequestOptions options, RequestInterceptorHandler handler) { diff --git a/flutter_monisuo/lib/core/storage/local_storage.dart b/flutter_monisuo/lib/core/storage/local_storage.dart index 46f46bb..5c6dc07 100644 --- a/flutter_monisuo/lib/core/storage/local_storage.dart +++ b/flutter_monisuo/lib/core/storage/local_storage.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; -/// 本地存储服务 +/// 本地存儲服務 class LocalStorage { LocalStorage._(); @@ -15,7 +15,7 @@ class LocalStorage { _prefs = await SharedPreferences.getInstance(); } - /// 获取实例 + /// 獲取實例 static SharedPreferences get prefs { if (_prefs == null) { throw Exception('LocalStorage not initialized. Call init() first.'); @@ -30,7 +30,7 @@ class LocalStorage { await prefs.setString(_tokenKey, token); } - /// 获取 Token + /// 獲取 Token static String? getToken() { return prefs.getString(_tokenKey); } @@ -40,17 +40,17 @@ class LocalStorage { await prefs.remove(_tokenKey); } - /// 是否已登录 + /// 是否已登錄 static bool get isLoggedIn => getToken() != null && getToken()!.isNotEmpty; - // ==================== 用户信息管理 ==================== + // ==================== 用戶信息管理 ==================== - /// 保存用户信息 + /// 保存用戶信息 static Future saveUserInfo(Map userInfo) async { await prefs.setString(_userInfoKey, jsonEncode(userInfo)); } - /// 获取用户信息 + /// 獲取用戶信息 static Map? getUserInfo() { final str = prefs.getString(_userInfoKey); if (str == null) return null; @@ -61,7 +61,7 @@ class LocalStorage { } } - /// 移除用户信息 + /// 移除用戶信息 static Future removeUserInfo() async { await prefs.remove(_userInfoKey); } @@ -73,47 +73,47 @@ class LocalStorage { await prefs.setString(key, value); } - /// 获取字符串 + /// 獲取字符串 static String? getString(String key) { return prefs.getString(key); } - /// 保存布尔值 + /// 保存布爾值 static Future setBool(String key, bool value) async { await prefs.setBool(key, value); } - /// 获取布尔值 + /// 獲取布爾值 static bool? getBool(String key) { return prefs.getBool(key); } - /// 清除所有数据 + /// 清除所有數據 static Future clearAll() async { await prefs.clear(); } - /// 清除用户数据(退出登录时调用) + /// 清除用戶數據(退出登錄時調用) static Future clearUserData() async { await removeToken(); await removeUserInfo(); } - // ==================== 引导页状态 ==================== + // ==================== 引導頁狀態 ==================== static const String _onboardingKey = 'onboarding_completed'; - /// 检查是否已完成引导页 + /// 檢查是否已完成引導頁 static bool get isOnboardingCompleted { return getBool(_onboardingKey) ?? false; } - /// 标记引导页已完成 + /// 標記引導頁已完成 static Future setOnboardingCompleted() async { await setBool(_onboardingKey, true); } - /// 重置引导页状态(用于测试) + /// 重置引導頁狀態(用於測試) static Future resetOnboarding() async { await prefs.remove(_onboardingKey); } diff --git a/flutter_monisuo/lib/core/theme/app_color_scheme.dart b/flutter_monisuo/lib/core/theme/app_color_scheme.dart index 3c4d512..16b79b4 100644 --- a/flutter_monisuo/lib/core/theme/app_color_scheme.dart +++ b/flutter_monisuo/lib/core/theme/app_color_scheme.dart @@ -1,33 +1,33 @@ import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; -/// Material Design 3 颜色系统 - Pencil Design Theme +/// Material Design 3 顏色系統 - Pencil Design Theme /// -/// 深色主题: "黑金传奇" (Black & Gold) -/// 深邃黑底 + 真金主色 + 翠绿盈利 → 金融奢华感 +/// 深色主題: "黑金傳奇" (Black & Gold) +/// 深邃黑底 + 真金主色 + 翠綠盈利 → 金融奢華感 /// 背景 #0B1120 | 主色 #D4AF37 | 盈利 #4ADE80 /// -/// 浅色主题: "白金殿堂" (White & Gold) -/// 纯净白底 + 深灰主色 + 琥珀强调 → 高端金融科技 -/// 背景 #F8FAFC | 主色 #1F2937 | 强调 #F59E0B +/// 淺色主題: "白金殿堂" (White & Gold) +/// 純淨白底 + 深灰主色 + 琥珀強調 → 高端金融科技 +/// 背景 #F8FAFC | 主色 #1F2937 | 強調 #F59E0B /// -/// 设计原则: +/// 設計原則: /// - Material Design 3 配色方案 /// - Glass Panel 毛玻璃效果 /// - Gold Glow 金色光效(原 Neon Glow) -/// - 渐变 CTA: primary → primary_container (135度) +/// - 漸變 CTA: primary → primary_container (135度) class AppColorScheme { AppColorScheme._(); // ============================================ - // 深色主题 - "Slate Dark" (Material Design 3) - // 背景 #0B1120 | 主色 #1E3A8A | 强调 #D4AF37 + // 深色主題 - "Slate Dark" (Material Design 3) + // 背景 #0B1120 | 主色 #1E3A8A | 強調 #D4AF37 // ============================================ - /// 背景基色 - Slate 深蓝黑 + /// 背景基色 - Slate 深藍黑 static const Color darkBackground = Color(0xFF0B1120); - /// Surface 层次 (从低到高) - Material Design 3 规范 + /// Surface 層次 (從低到高) - Material Design 3 規範 static const Color darkSurfaceDim = Color(0xFF0B1120); static const Color darkSurfaceLowest = Color(0xFF000000); static const Color darkSurfaceLow = Color(0xFF0F172A); @@ -38,7 +38,7 @@ class AppColorScheme { static const Color darkSurfaceBright = Color(0xFF334155); static const Color darkSurfaceVariant = Color(0xFF1E293B); - /// 兼容旧名称 + /// 兼容舊名稱 static const Color darkSurfaceContainerLowest = darkSurfaceLowest; static const Color darkSurfaceContainerLow = darkSurfaceLow; static const Color darkSurfaceHigh = darkSurfaceContainerHigh; @@ -59,7 +59,7 @@ class AppColorScheme { static const Color darkOnPrimaryFixed = Color(0xFF1F2937); static const Color darkOnPrimaryFixedVariant = Color(0xFF374151); - /// Secondary - 真金 #D4AF37 (黑金强调色) + /// Secondary - 真金 #D4AF37 (黑金強調色) static const Color darkSecondary = Color(0xFFD4AF37); static const Color darkSecondaryDim = Color(0xFFB8960E); static const Color darkSecondaryContainer = Color(0xFFE8C84A); @@ -81,7 +81,7 @@ class AppColorScheme { static const Color darkOnTertiaryFixed = Color(0xFF052E16); static const Color darkOnTertiaryFixedVariant = Color(0xFF14532D); - /// Error - Neon Red (红色 - 错误/卖出) + /// Error - Neon Red (紅色 - 錯誤/賣出) static const Color darkError = Color(0xFFff716c); static const Color darkErrorDim = Color(0xFFd7383b); static const Color darkErrorContainer = Color(0xFF9f0519); @@ -99,14 +99,14 @@ class AppColorScheme { static const Color darkSurfaceTint = Color(0xFFD4AF37); // ============================================ - // 浅色主题 - "Slate Light" (Material Design 3) - // 背景 #F8FAFC | 主色 #1E40AF | 强调 #D4AF37 + // 淺色主題 - "Slate Light" (Material Design 3) + // 背景 #F8FAFC | 主色 #1E40AF | 強調 #D4AF37 // ============================================ /// 背景基色 - Slate 50 static const Color lightBackground = Color(0xFFF8FAFC); - /// Surface 层次 (从低到高) + /// Surface 層次 (從低到高) static const Color lightSurfaceLowest = Color(0xFFFFFFFF); static const Color lightSurfaceLow = Color(0xFFF1F5F9); static const Color lightSurface = Color(0xFFF8FAFC); @@ -134,41 +134,41 @@ class AppColorScheme { static const Color lightOnSurfaceMuted = Color(0xFF94A3B8); // ============================================ - // Glass Panel 毛玻璃效果颜色 + // Glass Panel 毛玻璃效果顏色 // ============================================ /// Glass Panel 背景色 - rgba(33, 37, 47, 0.4) static const Color glassPanelBackground = Color(0x6621252F); - /// Glass Panel 边框色 - rgba(69, 72, 79, 0.15) + /// Glass Panel 邊框色 - rgba(69, 72, 79, 0.15) static const Color glassPanelBorder = Color(0x2645484f); // ============================================ - // Gold Glow 金色光效颜色(原 Neon Glow) + // Gold Glow 金色光效顏色(原 Neon Glow) // ============================================ - /// Primary Glow - 金色光晕 rgba(212, 175, 55, 0.15) + /// Primary Glow - 金色光暈 rgba(212, 175, 55, 0.15) static const Color neonGlowPrimary = Color(0x26D4AF37); - /// Secondary Glow - 蓝色光晕 rgba(30, 58, 138, 0.15) + /// Secondary Glow - 藍色光暈 rgba(30, 58, 138, 0.15) static const Color neonGlowSecondary = Color(0x261E3A8A); - /// Tertiary Glow - 绿色光晕 rgba(175, 255, 209, 0.2) + /// Tertiary Glow - 綠色光暈 rgba(175, 255, 209, 0.2) static const Color neonGlowTertiary = Color(0x33afffd1); // ============================================ - // 语义色 - 明暗通用 + // 語義色 - 明暗通用 // ============================================ - /// 涨/买入/成功 (深色主题色,亮色模式下请使用 getUpColor) + /// 漲/買入/成功 (深色主題色,亮色模式下請使用 getUpColor) static const Color up = darkTertiary; static const Color success = darkTertiary; - /// 跌/卖出/错误 - 使用 Material Design 3 error + /// 跌/賣出/錯誤 - 使用 Material Design 3 error static const Color down = Color(0xFFff716c); static const Color error = down; - /// 静默/禁用/次要 + /// 靜默/禁用/次要 static const Color muted = darkOnSurfaceVariant; /// 警告 @@ -178,50 +178,50 @@ class AppColorScheme { static const Color info = Color(0xFF2196F3); // ============================================ - // 主题感知辅助函数 - 已迁移至 AppThemeColors ThemeExtension - // 以下方法保留仅供 AppThemeColors 工厂内部使用 + // 主題感知輔助函數 - 已遷移至 AppThemeColors ThemeExtension + // 以下方法保留僅供 AppThemeColors 工廠內部使用 // ============================================ static const Color buyButtonFill = Color(0xFF059669); - /// 交易按钮卖出色 - 深红色填充,确保白色文字可读 + /// 交易按鈕賣出色 - 深紅色填充,確保白色文字可讀 static const Color sellButtonFill = Color(0xFFDC2626); // ============================================ - // 渐变预设 + // 漸變預設 // ============================================ - /// 深色 CTA 渐变 (primary → primary_container, 135度) + /// 深色 CTA 漸變 (primary → primary_container, 135度) static const LinearGradient darkCtaGradient = LinearGradient( colors: [darkPrimary, darkPrimaryContainer], begin: Alignment(-0.7, -0.7), end: Alignment(0.7, 0.7), ); - /// 浅色 CTA 渐变 + /// 淺色 CTA 漸變 static const LinearGradient lightCtaGradient = LinearGradient( colors: [lightPrimary, lightPrimaryContainer], begin: Alignment(-0.7, -0.7), end: Alignment(0.7, 0.7), ); - /// 兼容别名 + /// 兼容別名 static const LinearGradient ctaGradient = darkCtaGradient; - /// 买入按钮渐变 + /// 買入按鈕漸變 static const LinearGradient buyGradient = LinearGradient( colors: [darkTertiary, darkTertiaryContainer], begin: Alignment(-0.7, -0.7), end: Alignment(0.7, 0.7), ); - /// 卖出按钮渐变 + /// 賣出按鈕漸變 static const LinearGradient sellGradient = LinearGradient( colors: [darkError, darkErrorDim], begin: Alignment(-0.7, -0.7), end: Alignment(0.7, 0.7), ); - /// 资产卡片渐变 - 金色层次 + /// 資產卡片漸變 - 金色層次 static const LinearGradient assetCardGradient = LinearGradient( colors: [darkPrimaryContainer, darkPrimary], begin: Alignment.topLeft, @@ -229,7 +229,7 @@ class AppColorScheme { ); // ============================================ - // Shadcn ColorScheme - 深色主题 + // Shadcn ColorScheme - 深色主題 // ============================================ static ShadColorScheme get darkShad => ShadColorScheme( @@ -256,7 +256,7 @@ class AppColorScheme { ); // ============================================ - // Shadcn ColorScheme - 浅色主题 + // Shadcn ColorScheme - 淺色主題 // ============================================ static ShadColorScheme get lightShad => ShadColorScheme( @@ -283,7 +283,7 @@ class AppColorScheme { ); // ============================================ - // Material ColorScheme - 深色主题 (Material Design 3) + // Material ColorScheme - 深色主題 (Material Design 3) // ============================================ static ColorScheme get darkMaterial => ColorScheme.dark( @@ -322,17 +322,17 @@ class AppColorScheme { ); // ============================================ - // Material ColorScheme - 浅色主题 + // Material ColorScheme - 淺色主題 // ============================================ - /// 浅色主题 Error 色 + /// 淺色主題 Error 色 static const Color lightError = Color(0xFFDC2626); static const Color lightOnError = Color(0xFFFFFFFF); - /// 浅色主题 Outline 色 - Slate 500 + /// 淺色主題 Outline 色 - Slate 500 static const Color lightOutline = Color(0xFF64748B); - /// 浅色主题 Surface 色 (扩展) - Slate 系列 + /// 淺色主題 Surface 色 (擴展) - Slate 系列 static const Color lightSurfaceBright = Color(0xFFFFFFFF); static const Color lightSurfaceDim = Color(0xFFE2E8F0); static const Color lightSurfaceVariant = Color(0xFFE2E8F0); @@ -376,12 +376,12 @@ class AppColorScheme { ); // ============================================ - // 兼容性别名 - 仅保留有外部引用的 + // 兼容性別名 - 僅保留有外部引用的 // (buyButtonFill, sellButtonFill, darkCtaGradient, lightCtaGradient, - // buyGradient, sellGradient 已在上方定义,此处无需重复) + // buyGradient, sellGradient 已在上方定義,此處無需重複) // ============================================ - /// 获取买入按钮渐变(主题感知)- 用于盈利展示 + /// 獲取買入按鈕漸變(主題感知)- 用於盈利展示 } diff --git a/flutter_monisuo/lib/core/theme/app_spacing.dart b/flutter_monisuo/lib/core/theme/app_spacing.dart index 47ca9e0..eeac8d0 100644 --- a/flutter_monisuo/lib/core/theme/app_spacing.dart +++ b/flutter_monisuo/lib/core/theme/app_spacing.dart @@ -1,22 +1,22 @@ import 'package:flutter/material.dart'; -/// 间距系统 +/// 間距系統 /// -/// 使用 4px 基础单位,确保一致性 +/// 使用 4px 基礎單位,確保一致性 class AppSpacing { AppSpacing._(); // ============================================ - // 基础间距 (Base Spacing) + // 基礎間距 (Base Spacing) // ============================================ - /// 极小 - 4px + /// 極小 - 4px static const double xs = 4.0; /// 小 - 8px static const double sm = 8.0; - /// 中 - 16px (默认) + /// 中 - 16px (默認) static const double md = 16.0; /// 大 - 24px @@ -29,28 +29,28 @@ class AppSpacing { static const double xxl = 48.0; // ============================================ - // 预设 EdgeInsets + // 預設 EdgeInsets // ============================================ - /// 页面内边距 + /// 頁面內邊距 static const EdgeInsets pagePadding = EdgeInsets.all(md); - /// 卡片内边距 + /// 卡片內邊距 static const EdgeInsets cardPadding = EdgeInsets.all(md); - /// 列表项内边距 + /// 列表項內邊距 static const EdgeInsets listItemPadding = EdgeInsets.symmetric( horizontal: md, vertical: sm, ); - /// 按钮内边距 + /// 按鈕內邊距 static const EdgeInsets buttonPadding = EdgeInsets.symmetric( horizontal: lg, vertical: 14, ); - /// 输入框内边距 + /// 輸入框內邊距 static const EdgeInsets inputPadding = EdgeInsets.symmetric( horizontal: md, vertical: 14, @@ -60,98 +60,98 @@ class AppSpacing { // 便捷方法 // ============================================ - /// 获取水平间距 + /// 獲取水平間距 static SizedBox horizontal(double spacing) => SizedBox(width: spacing); - /// 获取垂直间距 + /// 獲取垂直間距 static SizedBox vertical(double spacing) => SizedBox(height: spacing); } -/// 圆角系统 - "The Kinetic Vault" & "The Ethereal Terminal" 规范 +/// 圓角系統 - "The Kinetic Vault" & "The Ethereal Terminal" 規範 /// -/// 设计规则: -/// - 按钮: xxl (24px / 1.5rem) +/// 設計規則: +/// - 按鈕: xxl (24px / 1.5rem) /// - 卡片: xl (16px) -/// - 输入框: md (8px) -/// - 标签: sm (4px) +/// - 輸入框: md (8px) +/// - 標籤: sm (4px) class AppRadius { AppRadius._(); // ============================================ - // 基础圆角 (Base Radius) + // 基礎圓角 (Base Radius) // ============================================ - /// 小圆角 - 6px (标签、徽章) — 对齐 Pencil $radius-sm + /// 小圓角 - 6px (標籤、徽章) — 對齊 Pencil $radius-sm static const double sm = 6.0; - /// 中圆角 - 10px (输入框、标签页) — 对齐 Pencil $radius-md + /// 中圓角 - 10px (輸入框、標籤頁) — 對齊 Pencil $radius-md static const double md = 10.0; - /// 大圆角 - 14px (卡片、按钮、列表) — 对齐 Pencil $radius-lg + /// 大圓角 - 14px (卡片、按鈕、列表) — 對齊 Pencil $radius-lg static const double lg = 14.0; - /// 特大圆角 - 20px (大卡片、弹窗) — 对齐 Pencil $radius-xl + /// 特大圓角 - 20px (大卡片、彈窗) — 對齊 Pencil $radius-xl static const double xl = 20.0; - /// 超大圆角 - 24px (按钮、模态框、底部抽屉) + /// 超大圓角 - 24px (按鈕、模態框、底部抽屜) static const double xxl = 24.0; - /// 圆形 - 9999px (Pill buttons) + /// 圓形 - 9999px (Pill buttons) static const double full = 9999.0; // ============================================ - // 预设 BorderRadius + // 預設 BorderRadius // ============================================ - /// 小圆角 + /// 小圓角 static BorderRadius get radiusSm => BorderRadius.circular(sm); - /// 中圆角 + /// 中圓角 static BorderRadius get radiusMd => BorderRadius.circular(md); - /// 大圆角 + /// 大圓角 static BorderRadius get radiusLg => BorderRadius.circular(lg); - /// 特大圆角 + /// 特大圓角 static BorderRadius get radiusXl => BorderRadius.circular(xl); - /// 超大圆角 + /// 超大圓角 static BorderRadius get radiusXxl => BorderRadius.circular(xxl); - /// 圆形 + /// 圓形 static BorderRadius get radiusFull => BorderRadius.circular(full); } -/// 响应式断点 +/// 響應式斷點 class AppBreakpoints { AppBreakpoints._(); - /// 手机竖屏 + /// 手機豎屏 static const double mobile = 360; - /// 手机横屏/小平板 + /// 手機橫屏/小平板 static const double tablet = 768; /// 平板/桌面 static const double desktop = 1024; - /// 检查是否为手机 + /// 檢查是否為手機 static bool isMobile(BuildContext context) { return MediaQuery.of(context).size.width < tablet; } - /// 检查是否为平板 + /// 檢查是否為平板 static bool isTablet(BuildContext context) { final width = MediaQuery.of(context).size.width; return width >= tablet && width < desktop; } - /// 检查是否为桌面 + /// 檢查是否為桌面 static bool isDesktop(BuildContext context) { return MediaQuery.of(context).size.width >= desktop; } - /// 根据屏幕宽度获取响应式值 + /// 根據屏幕寬度獲取響應式值 static T responsive( BuildContext context, { required T mobile, @@ -168,14 +168,14 @@ class AppBreakpoints { } } -/// 触摸目标尺寸 +/// 觸摸目標尺寸 class AppTouchTarget { AppTouchTarget._(); - /// 最小触摸目标 - 44x44 (iOS HIG 标准) + /// 最小觸摸目標 - 44x44 (iOS HIG 標準) static const double minSize = 44.0; - /// 确保触摸目标足够大 + /// 確保觸摸目標足夠大 static Widget ensureMinSize({ required Widget child, double minSize = AppTouchTarget.minSize, diff --git a/flutter_monisuo/lib/core/theme/app_theme.dart b/flutter_monisuo/lib/core/theme/app_theme.dart index 6d1f280..c9773ed 100644 --- a/flutter_monisuo/lib/core/theme/app_theme.dart +++ b/flutter_monisuo/lib/core/theme/app_theme.dart @@ -4,12 +4,12 @@ import 'app_color_scheme.dart'; import 'app_spacing.dart'; import 'app_theme_extension.dart'; -/// "The Kinetic Vault" & "The Ethereal Terminal" 主题配置 +/// "The Kinetic Vault" & "The Ethereal Terminal" 主題配置 class AppTheme { AppTheme._(); // ============================================ - // 深色主题 - "The Kinetic Vault" + // 深色主題 - "The Kinetic Vault" // ============================================ static ThemeData get darkTheme { @@ -23,7 +23,7 @@ class AppTheme { AppThemeColors.dark(), ], - // AppBar - 无边框规则 + // AppBar - 無邊框規則 appBarTheme: AppBarTheme( backgroundColor: AppColorScheme.darkBackground, foregroundColor: AppColorScheme.darkOnSurface, @@ -37,7 +37,7 @@ class AppTheme { ), ), - // 卡片 - 无边框,使用 surface 层次 + // 卡片 - 無邊框,使用 surface 層次 cardTheme: CardThemeData( color: AppColorScheme.darkSurface, elevation: 0, @@ -46,7 +46,7 @@ class AppTheme { ), ), - // 输入框 - Ghost Border 风格 + // 輸入框 - Ghost Border 風格 inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: AppColorScheme.darkSurfaceLow, @@ -73,7 +73,7 @@ class AppTheme { ), ), - // 按钮 - Pencil accent-primary (Gold) + // 按鈕 - Pencil accent-primary (Gold) elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: AppColorScheme.darkSecondary, @@ -97,13 +97,13 @@ class AppTheme { ), ), - // 分割线 - 使用层次而非边框 + // 分割線 - 使用層次而非邊框 dividerTheme: DividerThemeData( color: AppColorScheme.darkOutlineVariant.withValues(alpha: 0.1), thickness: 1, ), - // 底部导航 + // 底部導航 bottomNavigationBarTheme: BottomNavigationBarThemeData( backgroundColor: AppColorScheme.darkSurface, selectedItemColor: AppColorScheme.darkPrimary, @@ -115,7 +115,7 @@ class AppTheme { } // ============================================ - // 浅色主题 - "The Ethereal Terminal" + // 淺色主題 - "The Ethereal Terminal" // ============================================ static ThemeData get lightTheme { @@ -152,7 +152,7 @@ class AppTheme { ), ), - // 输入框 - 底部线条风格 + // 輸入框 - 底部線條風格 inputDecorationTheme: InputDecorationTheme( filled: true, fillColor: AppColorScheme.lightSurfaceLow, @@ -181,7 +181,7 @@ class AppTheme { ), ), - // 按钮 - Pencil accent-primary (dark gray) + // 按鈕 - Pencil accent-primary (dark gray) elevatedButtonTheme: ElevatedButtonThemeData( style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF1F2937), @@ -205,13 +205,13 @@ class AppTheme { ), ), - // 分割线 - 不使用,用留白代替 + // 分割線 - 不使用,用留白代替 dividerTheme: DividerThemeData( color: AppColorScheme.lightOutlineVariant.withValues(alpha: 0.2), thickness: 1, ), - // 底部导航 + // 底部導航 bottomNavigationBarTheme: BottomNavigationBarThemeData( backgroundColor: AppColorScheme.lightSurfaceHighest, selectedItemColor: AppColorScheme.lightPrimary, @@ -223,19 +223,19 @@ class AppTheme { } } -/// Pencil 设计系统字体规范 +/// Pencil 設計系統字體規範 /// -/// 对齐 Pencil 变量: Inter 字体, 明确的字号/字重层级 -/// 28px (总资产) → 24px (精选价格) → 22px (页面标题) → 16px (区块标题) -/// → 14px (卡片标题/价格) → 13px (正文) → 12px (标签/副标题) → 11px (小文字) +/// 對齊 Pencil 變量: Inter 字體, 明確的字號/字重層級 +/// 28px (總資產) → 24px (精選價格) → 22px (頁面標題) → 16px (區塊標題) +/// → 14px (卡片標題/價格) → 13px (正文) → 12px (標籤/副標題) → 11px (小文字) class AppTextStyles { AppTextStyles._(); // ============================================ - // Display - 核心数字 + // Display - 核心數字 // ============================================ - /// D1 - 总资产/余额 (28px w700) — Pencil $hero-value + /// D1 - 總資產/餘額 (28px w700) — Pencil $hero-value static TextStyle displayLarge(BuildContext context) => GoogleFonts.inter( fontSize: 28, fontWeight: FontWeight.w700, @@ -244,7 +244,7 @@ class AppTextStyles { letterSpacing: -0.5, ); - /// D2 - 精选价格 (24px w700) — Pencil 行情卡片价格 + /// D2 - 精選價格 (24px w700) — Pencil 行情卡片價格 static TextStyle displayMedium(BuildContext context) => GoogleFonts.inter( fontSize: 24, fontWeight: FontWeight.w700, @@ -252,7 +252,7 @@ class AppTextStyles { height: 1.15, ); - /// D3 - 页面标题 (22px w700) — Pencil 页面大标题 + /// D3 - 頁面標題 (22px w700) — Pencil 頁面大標題 static TextStyle displaySmall(BuildContext context) => GoogleFonts.inter( fontSize: 22, fontWeight: FontWeight.w700, @@ -261,10 +261,10 @@ class AppTextStyles { ); // ============================================ - // Headline - 标题 + // Headline - 標題 // ============================================ - /// 区块/导航标题 (16px w600) — Pencil $section-title + /// 區塊/導航標題 (16px w600) — Pencil $section-title static TextStyle headlineLarge(BuildContext context) => GoogleFonts.inter( fontSize: 16, fontWeight: FontWeight.w600, @@ -272,7 +272,7 @@ class AppTextStyles { height: 1.3, ); - /// 卡片标题/价格/标签页 (14px w600) — Pencil $card-title + /// 卡片標題/價格/標籤頁 (14px w600) — Pencil $card-title static TextStyle headlineMedium(BuildContext context) => GoogleFonts.inter( fontSize: 14, fontWeight: FontWeight.w600, @@ -280,7 +280,7 @@ class AppTextStyles { height: 1.35, ); - /// 副标题/持仓价值 (13px w500) + /// 副標題/持倉價值 (13px w500) static TextStyle headlineSmall(BuildContext context) => GoogleFonts.inter( fontSize: 13, fontWeight: FontWeight.w500, @@ -300,7 +300,7 @@ class AppTextStyles { height: 1.45, ); - /// 次要正文/副标题 (12px w400) — Pencil $subtitle + /// 次要正文/副標題 (12px w400) — Pencil $subtitle static TextStyle bodyMedium(BuildContext context) => GoogleFonts.inter( fontSize: 12, fontWeight: FontWeight.w400, @@ -308,7 +308,7 @@ class AppTextStyles { height: 1.45, ); - /// 辅助文字/币种全名 (11px w400) — Pencil $small-text + /// 輔助文字/幣種全名 (11px w400) — Pencil $small-text static TextStyle bodySmall(BuildContext context) => GoogleFonts.inter( fontSize: 11, fontWeight: FontWeight.w400, @@ -317,10 +317,10 @@ class AppTextStyles { ); // ============================================ - // Label - 标签 + // Label - 標籤 // ============================================ - /// 按钮/标签页标签 (12px w500) — Pencil $tab-label + /// 按鈕/標籤頁標籤 (12px w500) — Pencil $tab-label static TextStyle labelLarge(BuildContext context) => GoogleFonts.inter( fontSize: 12, fontWeight: FontWeight.w500, @@ -328,7 +328,7 @@ class AppTextStyles { height: 1.35, ); - /// 涨跌幅标签 (11px w500) — Pencil $change-badge + /// 漲跌幅標籤 (11px w500) — Pencil $change-badge static TextStyle labelMedium(BuildContext context) => GoogleFonts.inter( fontSize: 11, fontWeight: FontWeight.w500, @@ -336,7 +336,7 @@ class AppTextStyles { height: 1.35, ); - /// 涨跌幅标签-粗 (11px w600) — Pencil $change-badge-bold + /// 漲跌幅標籤-粗 (11px w600) — Pencil $change-badge-bold static TextStyle labelSmall(BuildContext context) => GoogleFonts.inter( fontSize: 11, fontWeight: FontWeight.w600, @@ -345,10 +345,10 @@ class AppTextStyles { ); // ============================================ - // 数字/金额 - Inter (等宽特性) + // 數字/金額 - Inter (等寬特性) // ============================================ - /// 大号数字 (28px w700) - 总资产、余额 + /// 大號數字 (28px w700) - 總資產、餘額 static TextStyle numberLarge(BuildContext context) => GoogleFonts.inter( fontSize: 28, fontWeight: FontWeight.w700, @@ -358,7 +358,7 @@ class AppTextStyles { fontFeatures: const [FontFeature.tabularFigures()], ); - /// 中号数字 (14px w600) - 价格、金额 + /// 中號數字 (14px w600) - 價格、金額 static TextStyle numberMedium(BuildContext context) => GoogleFonts.inter( fontSize: 14, fontWeight: FontWeight.w600, @@ -367,7 +367,7 @@ class AppTextStyles { fontFeatures: const [FontFeature.tabularFigures()], ); - /// 小号数字 (12px w500) - 涨跌幅、数量 + /// 小號數字 (12px w500) - 漲跌幅、數量 static TextStyle numberSmall(BuildContext context) => GoogleFonts.inter( fontSize: 12, fontWeight: FontWeight.w500, @@ -377,7 +377,7 @@ class AppTextStyles { ); } -/// 动画时长 +/// 動畫時長 class AnimationDurations { AnimationDurations._(); diff --git a/flutter_monisuo/lib/core/theme/app_theme_extension.dart b/flutter_monisuo/lib/core/theme/app_theme_extension.dart index 6ce652f..c82ad73 100644 --- a/flutter_monisuo/lib/core/theme/app_theme_extension.dart +++ b/flutter_monisuo/lib/core/theme/app_theme_extension.dart @@ -1,48 +1,48 @@ import 'package:flutter/material.dart'; import 'app_color_scheme.dart'; -/// 自定义主题扩展 — 注册到 ThemeData.extensions 中 +/// 自定義主題擴展 — 註冊到 ThemeData.extensions 中 /// -/// 存放 ColorScheme 标准槽位无法覆盖的语义色: -/// - 卡片背景语义色(dark/light 使用不同 surface 层级) -/// - 涨跌金融色(含带透明度的背景色) -/// - 渐变预设 +/// 存放 ColorScheme 標準槽位無法覆蓋的語義色: +/// - 卡片背景語義色(dark/light 使用不同 surface 層級) +/// - 漲跌金融色(含帶透明度的背景色) +/// - 漸變預設 /// - 光效透明度等 @immutable class AppThemeColors extends ThemeExtension { - // ---- 卡片背景语义色 ---- - /// 标准卡片背景(dark: surfaceContainer, light: surfaceContainerHigh) + // ---- 卡片背景語義色 ---- + /// 標準卡片背景(dark: surfaceContainer, light: surfaceContainerHigh) final Color surfaceCard; /// 高亮卡片背景(dark: surfaceContainerHighest, light: surfaceContainerHigh) final Color surfaceCardHigh; - // ---- 文字语义 ---- - /// 弱化/辅助文字 + // ---- 文字語義 ---- + /// 弱化/輔助文字 final Color onSurfaceMuted; - // ---- 涨跌金融色 ---- - /// 涨/盈利/买入 + // ---- 漲跌金融色 ---- + /// 漲/盈利/買入 final Color up; final Color upBackground; - /// 跌/亏损/卖出 + /// 跌/虧損/賣出 final Color down; final Color downBackground; - // ---- 强调色 ---- - /// 主强调色(dark: primary 金色, light: primary 深灰) + // ---- 強調色 ---- + /// 主強調色(dark: primary 金色, light: primary 深灰) final Color accentPrimary; // ---- 光效 ---- - /// 光晕透明度(dark: 0.15, light: 0.08) + /// 光暈透明度(dark: 0.15, light: 0.08) final double glowOpacity; - // ---- 边框 ---- - /// Ghost Border(outlineVariant 带透明度) + // ---- 邊框 ---- + /// Ghost Border(outlineVariant 帶透明度) final Color ghostBorder; - // ---- 渐变预设 ---- + // ---- 漸變預設 ---- final LinearGradient ctaGradient; final LinearGradient buyGradient; final LinearGradient sellGradient; @@ -67,7 +67,7 @@ class AppThemeColors extends ThemeExtension { required this.emeraldGradient, }); - /// 深色主题工厂 + /// 深色主題工廠 factory AppThemeColors.dark() => AppThemeColors( surfaceCard: AppColorScheme.darkSurfaceContainer, surfaceCardHigh: AppColorScheme.darkSurfaceContainerHighest, @@ -90,7 +90,7 @@ class AppThemeColors extends ThemeExtension { ), ); - /// 浅色主题工厂 + /// 淺色主題工廠 factory AppThemeColors.light() => AppThemeColors( surfaceCard: AppColorScheme.lightSurfaceLowest, surfaceCardHigh: AppColorScheme.lightSurfaceContainer, @@ -198,23 +198,23 @@ class AppThemeColors extends ThemeExtension { static double lerpDouble(double a, double b, double t) => a + (b - a) * t; } -/// BuildContext 主题快捷扩展 +/// BuildContext 主題快捷擴展 /// /// 用法: /// context.colors.primary → Theme.of(context).colorScheme.primary -/// context.appColors.up → AppThemeColors 中的涨色 +/// context.appColors.up → AppThemeColors 中的漲色 /// context.isDark → 是否深色模式 extension AppThemeContext on BuildContext { - /// Material ColorScheme 快捷访问 + /// Material ColorScheme 快捷訪問 ColorScheme get colors => Theme.of(this).colorScheme; - /// 自定义语义色快捷访问 + /// 自定義語義色快捷訪問 AppThemeColors get appColors => Theme.of(this).extension()!; /// 是否深色模式 bool get isDark => Theme.of(this).brightness == Brightness.dark; - /// TextTheme 快捷访问 + /// TextTheme 快捷訪問 TextTheme get textStyles => Theme.of(this).textTheme; } diff --git a/flutter_monisuo/lib/core/utils/toast_utils.dart b/flutter_monisuo/lib/core/utils/toast_utils.dart index b06c9c0..f5f4d68 100644 --- a/flutter_monisuo/lib/core/utils/toast_utils.dart +++ b/flutter_monisuo/lib/core/utils/toast_utils.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; import 'package:bot_toast/bot_toast.dart'; -/// Toast 工具类 - 提供统一的 toast 提示功能 +/// Toast 工具類 - 提供統一的 toast 提示功能 /// -/// 使用 bot_toast 实现,确保 toast 显示在所有弹窗之上 +/// 使用 bot_toast 實現,確保 toast 顯示在所有彈窗之上 class ToastUtils { ToastUtils._(); - /// 显示普通提示 + /// 顯示普通提示 static void show(String message, {Duration? duration}) { BotToast.showCustomText( toastBuilder: (_) => _buildToastWidget(message), @@ -18,7 +18,7 @@ class ToastUtils { ); } - /// 显示成功提示 + /// 顯示成功提示 static void showSuccess(String message, {Duration? duration}) { BotToast.showCustomText( toastBuilder: (_) => _buildToastWidget( @@ -32,7 +32,7 @@ class ToastUtils { ); } - /// 显示错误提示 + /// 顯示錯誤提示 static void showError(String message, {Duration? duration}) { BotToast.showCustomText( toastBuilder: (_) => _buildToastWidget( @@ -46,7 +46,7 @@ class ToastUtils { ); } - /// 显示警告提示 + /// 顯示警告提示 static void showWarning(String message, {Duration? duration}) { BotToast.showCustomText( toastBuilder: (_) => _buildToastWidget( @@ -60,7 +60,7 @@ class ToastUtils { ); } - /// 构建 toast widget + /// 構建 toast widget static Widget _buildToastWidget( String message, { Color? backgroundColor, diff --git a/flutter_monisuo/lib/data/models/account_models.dart b/flutter_monisuo/lib/data/models/account_models.dart index 56cc93b..687a33f 100644 --- a/flutter_monisuo/lib/data/models/account_models.dart +++ b/flutter_monisuo/lib/data/models/account_models.dart @@ -1,4 +1,4 @@ -/// 资产总览模型 +/// 資產總覽模型 class AssetOverview { final String totalAsset; final String fundBalance; @@ -22,7 +22,7 @@ class AssetOverview { } } -/// 资金账户模型 +/// 資金賬戶模型 class AccountFund { final int id; final int userId; @@ -51,7 +51,7 @@ class AccountFund { } } -/// 交易账户模型(持仓) +/// 交易賬戶模型(持倉) class AccountTrade { final int id; final int userId; @@ -78,7 +78,7 @@ class AccountTrade { }); factory AccountTrade.fromJson(Map json) { - // 后端返回 value(当前价值),前端用 currentValue + // 後端返回 value(當前價值),前端用 currentValue final quantityNum = double.tryParse(json['quantity']?.toString() ?? '0') ?? 0; final avgPriceNum = @@ -108,7 +108,7 @@ class AccountTrade { ); } - /// 格式化盈亏率 + /// 格式化盈虧率 String get formattedProfitRate { final prefix = profitRate >= 0 ? '+' : ''; return '$prefix${profitRate.toStringAsFixed(2)}%'; @@ -118,7 +118,7 @@ class AccountTrade { bool get isProfit => profitRate >= 0; } -/// 资金流水模型 +/// 資金流水模型 class AccountFlow { final int id; final int userId; @@ -155,26 +155,26 @@ class AccountFlow { ); } - /// 流水类型文字 + /// 流水類型文字 String get flowTypeText { switch (flowType) { case '1': return '充值'; case '2': - return '提现'; + return '提現'; case '3': - return '转入交易账户'; + return '轉入交易賬戶'; case '4': - return '从交易账户转出'; + return '從交易賬戶轉出'; case '5': - return '卖出收入'; + return '賣出收入'; case '6': - return '买入支出'; + return '買入支出'; default: return '未知'; } } - /// 是否为收入 + /// 是否為收入 bool get isIncome => ['1', '3', '5'].contains(flowType); } diff --git a/flutter_monisuo/lib/data/models/coin.dart b/flutter_monisuo/lib/data/models/coin.dart index 935b0cf..690639e 100644 --- a/flutter_monisuo/lib/data/models/coin.dart +++ b/flutter_monisuo/lib/data/models/coin.dart @@ -1,4 +1,4 @@ -/// 币种模型 +/// 幣種模型 class Coin { final int id; final String code; @@ -7,7 +7,7 @@ class Coin { final double price; final double? priceUsd; final double? priceCny; - final int priceType; // 1=实时价格, 2=管理员设置 + final int priceType; // 1=實時價格, 2=管理員設置 final double change24h; final double? high24h; final double? low24h; @@ -70,7 +70,7 @@ class Coin { }; } - /// 显示图标(Unicode 符号) + /// 顯示圖標(Unicode 符號) String get displayIcon { const icons = { 'BTC': '\u20BF', @@ -85,22 +85,22 @@ class Coin { return icons[code] ?? '\u25CF'; } - /// 格式化价格显示 + /// 格式化價格顯示 String get formattedPrice { if (price >= 1000) return price.toStringAsFixed(2); if (price >= 1) return price.toStringAsFixed(4); return price.toStringAsFixed(6); } - /// 格式化涨跌幅 + /// 格式化漲跌幅 String get formattedChange { final prefix = change24h >= 0 ? '+' : ''; return '$prefix${change24h.toStringAsFixed(2)}%'; } - /// 是否上涨 + /// 是否上漲 bool get isUp => change24h >= 0; - /// 是否为实时价格 + /// 是否為實時價格 bool get isRealtime => priceType == 1; } diff --git a/flutter_monisuo/lib/data/models/order_models.dart b/flutter_monisuo/lib/data/models/order_models.dart index ef06289..ac47011 100644 --- a/flutter_monisuo/lib/data/models/order_models.dart +++ b/flutter_monisuo/lib/data/models/order_models.dart @@ -1,14 +1,14 @@ -/// 交易订单模型 +/// 交易訂單模型 class OrderTrade { final int id; final String orderNo; final int userId; final String coinCode; - final int direction; // 1=买入, 2=卖出 + final int direction; // 1=買入, 2=賣出 final String price; final String quantity; final String amount; - final int status; // 1=待处理, 2=已完成, 3=已取消 + final int status; // 1=待處理, 2=已完成, 3=已取消 final DateTime? createTime; final DateTime? updateTime; @@ -47,13 +47,13 @@ class OrderTrade { } /// 方向文字 - String get directionText => direction == 1 ? '买入' : '卖出'; + String get directionText => direction == 1 ? '買入' : '賣出'; - /// 状态文字 + /// 狀態文字 String get statusText { switch (status) { case 1: - return '待处理'; + return '待處理'; case 2: return '已完成'; case 3: @@ -63,33 +63,33 @@ class OrderTrade { } } - /// 是否为买入 + /// 是否為買入 bool get isBuy => direction == 1; } -/// 充提订单模型 +/// 充提訂單模型 class OrderFund { final int id; final String orderNo; final int userId; final String username; - final int type; // 1=充值, 2=提现 + final int type; // 1=充值, 2=提現 final String amount; - final String? fee; // 手续费 - final String? receivableAmount; // 应收款项 + final String? fee; // 手續費 + final String? receivableAmount; // 應收款項 final int status; - // 充值状态: 1=待付款, 2=待确认, 3=已完成, 4=已驳回, 5=已取消 - // 提现状态: 1=待审批, 2=已出款, 3=已驳回, 4=已取消, 5=待财务审核 - final int? walletId; // 冷钱包ID(充值) - final String? walletAddress; // 钱包地址(充值/提现) - final String? network; // 提现网络类型 - final String? withdrawContact; // 提现联系方式 + // 充值狀態: 1=待付款, 2=待確認, 3=已完成, 4=已駁回, 5=已取消 + // 提現狀態: 1=待審批, 2=已出款, 3=已駁回, 4=已取消, 5=待財務審核 + final int? walletId; // 冷錢包ID(充值) + final String? walletAddress; // 錢包地址(充值/提現) + final String? network; // 提現網絡類型 + final String? withdrawContact; // 提現聯繫方式 final String remark; final String? rejectReason; final String? adminRemark; final DateTime? createTime; - final DateTime? payTime; // 用户确认打款时间 - final DateTime? confirmTime; // 管理员确认时间 + final DateTime? payTime; // 用戶確認打款時間 + final DateTime? confirmTime; // 管理員確認時間 OrderFund({ required this.id, @@ -143,72 +143,72 @@ class OrderFund { ); } - /// 订单类型文字 - String get typeText => type == 1 ? '充值' : '提现'; + /// 訂單類型文字 + String get typeText => type == 1 ? '充值' : '提現'; - /// 状态文字 (根据类型区分) + /// 狀態文字 (根據類型區分) String get statusText { if (type == 1) { - // 充值状态 + // 充值狀態 switch (status) { case 1: return '待付款'; case 2: - return '待确认'; + return '待確認'; case 3: return '已完成'; case 4: - return '已驳回'; + return '已駁回'; case 5: return '已取消'; default: return '未知'; } } else { - // 提现状态 + // 提現狀態 switch (status) { case 1: - return '待审批'; + return '待審批'; case 2: return '已出款'; case 3: - return '已驳回'; + return '已駁回'; case 4: return '已取消'; case 5: - return '待财务审核'; + return '待財務審核'; default: return '未知'; } } } - /// 是否为充值 + /// 是否為充值 bool get isDeposit => type == 1; /// 是否可取消 - /// 充值: 仅待付款可取消 - /// 提现: 仅待审批可取消 + /// 充值: 僅待付款可取消 + /// 提現: 僅待審批可取消 bool get canCancel { if (type == 1) { return status == 1; // 充值待付款 } else { - return status == 1; // 提现待审批 + return status == 1; // 提現待審批 } } - /// 是否可确认打款 (仅充值待付款) + /// 是否可確認打款 (僅充值待付款) bool get canConfirmPay => type == 1 && status == 1; } -/// 冷钱包模型 +/// 冷錢包模型 class ColdWallet { final int id; final String name; final String address; final String network; final bool isDefault; - final int status; // 0=禁用, 1=启用 + final int status; // 0=禁用, 1=啟用 final DateTime? createTime; ColdWallet({ diff --git a/flutter_monisuo/lib/data/models/user.dart b/flutter_monisuo/lib/data/models/user.dart index 45a0b05..b9208e5 100644 --- a/flutter_monisuo/lib/data/models/user.dart +++ b/flutter_monisuo/lib/data/models/user.dart @@ -1,4 +1,4 @@ -/// 用户模型 +/// 用戶模型 class User { final int id; final String username; @@ -62,21 +62,21 @@ class User { }; } - /// 获取头像显示文字(用户名首字母) + /// 獲取頭像顯示文字(用戶名首字母) String get avatarText => username.isNotEmpty ? username.substring(0, 1).toUpperCase() : 'U'; - /// KYC 状态文字 + /// KYC 狀態文字 String get kycStatusText { switch (kycStatus) { case 0: - return '未认证'; + return '未認證'; case 1: - return '审核中'; + return '審核中'; case 2: - return '已认证'; + return '已認證'; case 3: - return '认证失败'; + return '認證失敗'; default: return '未知'; } diff --git a/flutter_monisuo/lib/data/services/asset_service.dart b/flutter_monisuo/lib/data/services/asset_service.dart index edfb29e..ca1a14b 100644 --- a/flutter_monisuo/lib/data/services/asset_service.dart +++ b/flutter_monisuo/lib/data/services/asset_service.dart @@ -3,13 +3,13 @@ import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/account_models.dart'; -/// 资产服务 +/// 資產服務 class AssetService { final DioClient _client; AssetService(this._client); - /// 获取资产总览 + /// 獲取資產總覽 Future> getOverview() async { final response = await _client.get>( ApiEndpoints.assetOverview, @@ -21,17 +21,17 @@ class AssetService { response.message, ); } - return ApiResponse.fail(response.message ?? '获取资产总览失败'); + return ApiResponse.fail(response.message ?? '獲取資產總覽失敗'); } - /// 获取资金账户 + /// 獲取資金賬戶 Future> getFundAccount() async { final response = await _client.get>( ApiEndpoints.fundAccount, ); if (response.success && response.data != null) { - // 后端返回格式: {"fund": {...}} + // 後端返回格式: {"fund": {...}} final fundData = response.data!['fund'] as Map?; if (fundData != null) { return ApiResponse.success( @@ -40,25 +40,25 @@ class AssetService { ); } } - return ApiResponse.fail(response.message ?? '获取资金账户失败'); + return ApiResponse.fail(response.message ?? '獲取資金賬戶失敗'); } - /// 获取交易账户 + /// 獲取交易賬戶 Future>> getTradeAccount() async { final response = await _client.get>( ApiEndpoints.tradeAccount, ); if (response.success && response.data != null) { - // 后端返回格式: {"positions": [...]} + // 後端返回格式: {"positions": [...]} final list = response.data!['positions'] as List?; final accounts = list?.map((e) => AccountTrade.fromJson(e as Map)).toList() ?? []; return ApiResponse.success(accounts, response.message); } - return ApiResponse.fail(response.message ?? '获取交易账户失败'); + return ApiResponse.fail(response.message ?? '獲取交易賬戶失敗'); } - /// 资金划转 + /// 資金劃轉 Future> transfer({ required int direction, required String amount, @@ -72,7 +72,7 @@ class AssetService { ); } - /// 获取资金流水 + /// 獲取資金流水 Future>> getFlow({ int? flowType, int pageNum = 1, @@ -90,7 +90,7 @@ class AssetService { ); } - /// 获取每日盈亏数据 + /// 獲取每日盈虧數據 Future>> getDailyProfit({ required int year, required int month, @@ -102,6 +102,6 @@ class AssetService { if (response.success && response.data != null) { return ApiResponse.success(response.data!, response.message); } - return ApiResponse.fail(response.message ?? '获取每日盈亏数据失败'); + return ApiResponse.fail(response.message ?? '獲取每日盈虧數據失敗'); } } diff --git a/flutter_monisuo/lib/data/services/bonus_service.dart b/flutter_monisuo/lib/data/services/bonus_service.dart index 1188109..06c7f91 100644 --- a/flutter_monisuo/lib/data/services/bonus_service.dart +++ b/flutter_monisuo/lib/data/services/bonus_service.dart @@ -2,13 +2,13 @@ import '../../core/constants/api_endpoints.dart'; import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; -/// 福利中心服务 +/// 福利中心服務 class BonusService { final DioClient _client; BonusService(this._client); - /// 获取福利中心状态 + /// 獲取福利中心狀態 Future>> getWelfareStatus() async { final response = await _client.get>( ApiEndpoints.bonusWelfare, @@ -16,10 +16,10 @@ class BonusService { if (response.success && response.data != null) { return ApiResponse.success(response.data!, response.message); } - return ApiResponse.fail(response.message ?? '获取福利状态失败'); + return ApiResponse.fail(response.message ?? '獲取福利狀態失敗'); } - /// 领取首充福利 + /// 領取首充福利 Future>> claimNewUserBonus() async { return _client.post>( ApiEndpoints.bonusClaim, @@ -27,7 +27,7 @@ class BonusService { ); } - /// 领取推广奖励 + /// 領取推廣獎勵 Future>> claimReferralBonus( int referredUserId, int milestone, @@ -41,4 +41,21 @@ class BonusService { }, ); } + + /// 領取間接推廣獎勵 + Future>> claimIndirectReferralBonus( + int directReferralId, + int indirectReferredUserId, + int milestone, + ) async { + return _client.post>( + ApiEndpoints.bonusClaim, + data: { + 'type': 'indirect_referral', + 'directReferralId': directReferralId, + 'indirectReferredUserId': indirectReferredUserId, + 'milestone': milestone, + }, + ); + } } diff --git a/flutter_monisuo/lib/data/services/fund_service.dart b/flutter_monisuo/lib/data/services/fund_service.dart index c44124f..0f2c2d1 100644 --- a/flutter_monisuo/lib/data/services/fund_service.dart +++ b/flutter_monisuo/lib/data/services/fund_service.dart @@ -3,13 +3,13 @@ import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/order_models.dart'; -/// 充提服务 +/// 充提服務 class FundService { final DioClient _client; FundService(this._client); - /// 获取默认钱包地址 + /// 獲取默認錢包地址 Future> getDefaultWallet() async { final response = await _client.get>( ApiEndpoints.defaultWallet, @@ -21,10 +21,10 @@ class FundService { response.message, ); } - return ApiResponse.fail(response.message ?? '获取钱包地址失败'); + return ApiResponse.fail(response.message ?? '獲取錢包地址失敗'); } - /// 申请充值 + /// 申請充值 /// 返回包含 orderNo, amount, status, walletAddress, walletNetwork 的信息 Future>> deposit({ required String amount, @@ -39,7 +39,7 @@ class FundService { ); } - /// 用户确认已打款 + /// 用戶確認已打款 Future> confirmPay(String orderNo) async { return _client.post( ApiEndpoints.confirmPay, @@ -47,7 +47,7 @@ class FundService { ); } - /// 申请提现 + /// 申請提現 Future>> withdraw({ required String amount, required String withdrawAddress, @@ -67,7 +67,7 @@ class FundService { ); } - /// 获取可用的提现网络列表 + /// 獲取可用的提現網絡列表 Future>> getWalletNetworks() async { final response = await _client.get>( ApiEndpoints.walletNetworks, @@ -78,10 +78,10 @@ class FundService { response.message, ); } - return ApiResponse.fail(response.message ?? '获取网络列表失败'); + return ApiResponse.fail(response.message ?? '獲取網絡列表失敗'); } - /// 取消订单 + /// 取消訂單 Future> cancelOrder(String orderNo) async { return _client.post( ApiEndpoints.cancelOrder, @@ -89,7 +89,7 @@ class FundService { ); } - /// 获取充提记录 + /// 獲取充提記錄 Future>> getOrders({ int? type, int pageNum = 1, @@ -107,7 +107,7 @@ class FundService { ); } - /// 解析充提记录列表 + /// 解析充提記錄列表 List parseOrderList(List? list) { if (list == null) return []; return list.map((e) => OrderFund.fromJson(e as Map)).toList(); diff --git a/flutter_monisuo/lib/data/services/market_service.dart b/flutter_monisuo/lib/data/services/market_service.dart index fa7855e..934e5a9 100644 --- a/flutter_monisuo/lib/data/services/market_service.dart +++ b/flutter_monisuo/lib/data/services/market_service.dart @@ -3,13 +3,13 @@ import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/coin.dart'; -/// 行情服务 +/// 行情服務 class MarketService { final DioClient _client; MarketService(this._client); - /// 获取币种列表 + /// 獲取幣種列表 Future>> getCoinList() async { final response = await _client.get>( ApiEndpoints.coinList, @@ -20,10 +20,10 @@ class MarketService { final coins = list?.map((e) => Coin.fromJson(e as Map)).toList() ?? []; return ApiResponse.success(coins, response.message); } - return ApiResponse.fail(response.message ?? '获取币种列表失败'); + return ApiResponse.fail(response.message ?? '獲取幣種列表失敗'); } - /// 获取币种详情 + /// 獲取幣種詳情 Future> getCoinDetail(String code) async { final response = await _client.get>( ApiEndpoints.coinDetail, @@ -36,10 +36,10 @@ class MarketService { response.message, ); } - return ApiResponse.fail(response.message ?? '获取币种详情失败'); + return ApiResponse.fail(response.message ?? '獲取幣種詳情失敗'); } - /// 搜索币种 + /// 搜索幣種 Future>> searchCoins(String keyword) async { final response = await _client.get>( ApiEndpoints.coinSearch, @@ -51,6 +51,6 @@ class MarketService { final coins = list?.map((e) => Coin.fromJson(e as Map)).toList() ?? []; return ApiResponse.success(coins, response.message); } - return ApiResponse.fail(response.message ?? '搜索失败'); + return ApiResponse.fail(response.message ?? '搜索失敗'); } } diff --git a/flutter_monisuo/lib/data/services/trade_service.dart b/flutter_monisuo/lib/data/services/trade_service.dart index 55f8b06..178115d 100644 --- a/flutter_monisuo/lib/data/services/trade_service.dart +++ b/flutter_monisuo/lib/data/services/trade_service.dart @@ -3,13 +3,13 @@ import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/order_models.dart'; -/// 交易服务 +/// 交易服務 class TradeService { final DioClient _client; TradeService(this._client); - /// 买入 + /// 買入 Future>> buy({ required String coinCode, required String price, @@ -25,7 +25,7 @@ class TradeService { ); } - /// 卖出 + /// 賣出 Future>> sell({ required String coinCode, required String price, @@ -41,7 +41,7 @@ class TradeService { ); } - /// 获取交易记录 + /// 獲取交易記錄 Future>> getOrders({ String? coinCode, int? direction, @@ -61,7 +61,7 @@ class TradeService { ); } - /// 获取订单详情 + /// 獲取訂單詳情 Future> getOrderDetail(String orderNo) async { final response = await _client.get>( ApiEndpoints.tradeOrderDetail, @@ -74,6 +74,6 @@ class TradeService { response.message, ); } - return ApiResponse.fail(response.message ?? '获取订单详情失败'); + return ApiResponse.fail(response.message ?? '獲取訂單詳情失敗'); } } diff --git a/flutter_monisuo/lib/data/services/user_service.dart b/flutter_monisuo/lib/data/services/user_service.dart index 37cc738..13902b9 100644 --- a/flutter_monisuo/lib/data/services/user_service.dart +++ b/flutter_monisuo/lib/data/services/user_service.dart @@ -5,13 +5,13 @@ import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/user.dart'; -/// 用户服务 +/// 用戶服務 class UserService { final DioClient _client; UserService(this._client); - /// 用户登录 + /// 用戶登錄 Future>> login( String username, String password, @@ -22,7 +22,7 @@ class UserService { ); } - /// 用户注册(multipart:含身份证图片和可选推广码) + /// 用戶註冊(multipart:含身份證圖片和可選推廣碼) Future>> register( String username, String password, { @@ -43,7 +43,7 @@ class UserService { ); } - /// 获取用户信息 + /// 獲取用戶信息 Future> getUserInfo() async { return _client.get( ApiEndpoints.userInfo, @@ -51,8 +51,8 @@ class UserService { ); } - /// 上传 KYC 资料(身份证正反面图片字节) - /// 使用 fromBytes 以兼容 Web 和移动端 + /// 上傳 KYC 資料(身份證正反面圖片字節) + /// 使用 fromBytes 以兼容 Web 和移動端 Future> uploadKyc( Uint8List frontBytes, Uint8List backBytes, @@ -67,7 +67,7 @@ class UserService { ); } - /// 退出登录 + /// 退出登錄 Future> logout() async { return _client.post(ApiEndpoints.logout); } diff --git a/flutter_monisuo/lib/main.dart b/flutter_monisuo/lib/main.dart index 797ee21..48013e7 100644 --- a/flutter_monisuo/lib/main.dart +++ b/flutter_monisuo/lib/main.dart @@ -27,17 +27,17 @@ import 'ui/pages/main/main_page.dart'; import 'ui/pages/onboarding/onboarding_page.dart'; void main() async { - // 确保 Flutter 绑定初始化 + // 確保 Flutter 綁定初始化 WidgetsFlutterBinding.ensureInitialized(); - // 全局错误处理 - Flutter 框架错误 + // 全局錯誤處理 - Flutter 框架錯誤 FlutterError.onError = (FlutterErrorDetails details) { FlutterError.presentError(details); debugPrint('Flutter Error: ${details.exception}'); debugPrint('Stack trace: ${details.stack}'); }; - // 全局错误处理 - 异步未捕获错误 + // 全局錯誤處理 - 異步未捕獲錯誤 PlatformDispatcher.instance.onError = (error, stack) { debugPrint('Uncaught error: $error'); debugPrint('Stack: $stack'); @@ -88,7 +88,7 @@ class MyApp extends StatelessWidget { final dioClient = DioClient(); return [ - // Theme Provider (必须放在最前面) + // Theme Provider (必須放在最前面) ChangeNotifierProvider( create: (_) => ThemeProvider()..init(), ), @@ -105,7 +105,7 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider( create: (ctx) { final authProvider = AuthProvider(ctx.read()); - // token 过期时,DioClient 回调 AuthProvider 强制登出 + // token 過期時,DioClient 回調 AuthProvider 強制登出 dioClient.onUnauthorized = authProvider.forceLogout; return authProvider; }, @@ -137,7 +137,7 @@ class MyApp extends StatelessWidget { ], builder: (context, child) { child = ShadAppBuilder(child: child!); - // 配置 BotToast 确保显示在所有内容之上 + // 配置 BotToast 確保顯示在所有內容之上 final botToastBuilder = BotToastInit(); child = botToastBuilder(context, child); return child; @@ -153,13 +153,13 @@ class MyApp extends StatelessWidget { } } -/// 根页面 - 决定显示引导页还是主页面 +/// 根頁面 - 決定顯示引導頁還是主頁面 class RootPage extends StatelessWidget { const RootPage({super.key}); @override Widget build(BuildContext context) { - // 检查是否需要显示引导页 + // 檢查是否需要顯示引導頁 if (!LocalStorage.isOnboardingCompleted) { return OnboardingPage( onComplete: () { diff --git a/flutter_monisuo/lib/providers/asset_provider.dart b/flutter_monisuo/lib/providers/asset_provider.dart index 65c6e9c..c53833e 100644 --- a/flutter_monisuo/lib/providers/asset_provider.dart +++ b/flutter_monisuo/lib/providers/asset_provider.dart @@ -7,7 +7,7 @@ import '../data/models/order_models.dart'; import '../data/services/asset_service.dart'; import '../data/services/fund_service.dart'; -/// 资产状态管理 +/// 資產狀態管理 class AssetProvider extends ChangeNotifier { final AssetService _assetService; final FundService _fundService; @@ -23,7 +23,7 @@ class AssetProvider extends ChangeNotifier { bool _isLoadingOrders = false; String? _error; - // 加载状态标记,防止重复加载 + // 加載狀態標記,防止重複加載 bool _overviewLoaded = false; bool _fundAccountLoaded = false; bool _tradeAccountLoaded = false; @@ -42,9 +42,9 @@ class AssetProvider extends ChangeNotifier { bool get isLoadingOrders => _isLoadingOrders; String? get error => _error; - /// 加载资产总览 + /// 加載資產總覽 Future loadOverview({bool force = false}) async { - // 如果已经加载过且不是强制刷新,则跳过 + // 如果已經加載過且不是強制刷新,則跳過 if (_overviewLoaded && !force && _overview != null) { return; } @@ -62,16 +62,16 @@ class AssetProvider extends ChangeNotifier { _error = response.message; } } catch (e) { - _error = '加载失败: $e'; + _error = '加載失敗: $e'; } _isLoading = false; notifyListeners(); } - /// 加载资金账户 + /// 加載資金賬戶 Future loadFundAccount({bool force = false}) async { - // 如果已经加载过且不是强制刷新,则跳过 + // 如果已經加載過且不是強制刷新,則跳過 if (_fundAccountLoaded && !force && _fundAccount != null) { return; } @@ -84,13 +84,13 @@ class AssetProvider extends ChangeNotifier { notifyListeners(); } } catch (_) { - // 忽略错误 + // 忽略錯誤 } } - /// 加载交易账户 + /// 加載交易賬戶 Future loadTradeAccount({bool force = false}) async { - // 如果已经加载过且不是强制刷新,则跳过 + // 如果已經加載過且不是強制刷新,則跳過 if (_tradeAccountLoaded && !force && _tradeAccounts.isNotEmpty) { return; } @@ -103,11 +103,11 @@ class AssetProvider extends ChangeNotifier { notifyListeners(); } } catch (_) { - // 忽略错误 + // 忽略錯誤 } } - /// 加载资金流水 + /// 加載資金流水 Future loadFlows({int? flowType, int pageNum = 1}) async { _isLoadingFlows = true; notifyListeners(); @@ -122,14 +122,14 @@ class AssetProvider extends ChangeNotifier { _flows = list?.map((e) => AccountFlow.fromJson(e as Map)).toList() ?? []; } } catch (_) { - // 忽略错误 + // 忽略錯誤 } _isLoadingFlows = false; notifyListeners(); } - /// 划转资金 + /// 劃轉資金 Future> transfer({ required int direction, required String amount, @@ -140,7 +140,7 @@ class AssetProvider extends ChangeNotifier { amount: amount, ); if (response.success) { - // 强制刷新数据 + // 強制刷新數據 await loadOverview(force: true); await loadFundAccount(force: true); await loadTradeAccount(force: true); @@ -148,11 +148,11 @@ class AssetProvider extends ChangeNotifier { } return response; } catch (e) { - return ApiResponse.fail('划转失败: $e'); + return ApiResponse.fail('劃轉失敗: $e'); } } - /// 充值 - 返回订单详情包含钱包地址 + /// 充值 - 返回訂單詳情包含錢包地址 Future>> deposit({required String amount, String? remark}) async { try { final response = await _fundService.deposit(amount: amount, remark: remark); @@ -163,11 +163,11 @@ class AssetProvider extends ChangeNotifier { } return response; } catch (e) { - return ApiResponse.fail('充值申请失败: $e'); + return ApiResponse.fail('充值申請失敗: $e'); } } - /// 确认已打款 + /// 確認已打款 Future> confirmPay(String orderNo) async { try { final response = await _fundService.confirmPay(orderNo); @@ -177,11 +177,11 @@ class AssetProvider extends ChangeNotifier { } return response; } catch (e) { - return ApiResponse.fail('确认打款失败: $e'); + return ApiResponse.fail('確認打款失敗: $e'); } } - /// 提现 + /// 提現 Future>> withdraw({ required String amount, required String withdrawAddress, @@ -205,11 +205,11 @@ class AssetProvider extends ChangeNotifier { } return response; } catch (e) { - return ApiResponse.fail('提现申请失败: $e'); + return ApiResponse.fail('提現申請失敗: $e'); } } - /// 加载充提订单 + /// 加載充提訂單 Future loadFundOrders({int? type, int pageNum = 1, int pageSize = 20}) async { _isLoadingOrders = true; notifyListeners(); @@ -225,14 +225,14 @@ class AssetProvider extends ChangeNotifier { _fundOrders = _fundService.parseOrderList(list); } } catch (_) { - // 忽略错误 + // 忽略錯誤 } _isLoadingOrders = false; notifyListeners(); } - /// 取消订单 + /// 取消訂單 Future> cancelOrder(String orderNo) async { try { final response = await _fundService.cancelOrder(orderNo); @@ -242,11 +242,11 @@ class AssetProvider extends ChangeNotifier { } return response; } catch (e) { - return ApiResponse.fail('取消订单失败: $e'); + return ApiResponse.fail('取消訂單失敗: $e'); } } - /// 获取可用提现网络列表 + /// 獲取可用提現網絡列表 Future> getWalletNetworks() async { try { final response = await _fundService.getWalletNetworks(); @@ -259,7 +259,7 @@ class AssetProvider extends ChangeNotifier { } } - /// 刷新所有资产数据 + /// 刷新所有資產數據 Future refreshAll({bool force = false}) async { await Future.wait([ loadOverview(force: force), @@ -268,7 +268,7 @@ class AssetProvider extends ChangeNotifier { ]); } - /// 重置加载状态(用于退出登录时) + /// 重置加載狀態(用於退出登錄時) void resetLoadState() { _overviewLoaded = false; _fundAccountLoaded = false; diff --git a/flutter_monisuo/lib/providers/auth_provider.dart b/flutter_monisuo/lib/providers/auth_provider.dart index 3f070ce..8a5d18b 100644 --- a/flutter_monisuo/lib/providers/auth_provider.dart +++ b/flutter_monisuo/lib/providers/auth_provider.dart @@ -6,7 +6,7 @@ import '../core/storage/local_storage.dart'; import '../data/models/user.dart'; import '../data/services/user_service.dart'; -/// 认证状态管理 +/// 認證狀態管理 class AuthProvider extends ChangeNotifier { final UserService _userService; @@ -25,7 +25,7 @@ class AuthProvider extends ChangeNotifier { bool get isLoading => _isLoading; String? get token => _token; - /// 初始化认证状态 + /// 初始化認證狀態 Future _initAuth() async { _token = LocalStorage.getToken(); _isLoggedIn = _token?.isNotEmpty == true; @@ -41,12 +41,12 @@ class AuthProvider extends ChangeNotifier { return userJson != null ? User.fromJson(userJson) : null; } - /// 登录 + /// 登錄 Future> login(String username, String password) { return _authenticate(() => _userService.login(username, password)); } - /// 注册(含身份证图片和可选推广码) + /// 註冊(含身份證圖片和可選推廣碼) Future> register( String username, String password, { @@ -63,7 +63,7 @@ class AuthProvider extends ChangeNotifier { )); } - /// 统一认证处理 + /// 統一認證處理 Future> _authenticate( Future>> Function() action, ) async { @@ -73,18 +73,18 @@ class AuthProvider extends ChangeNotifier { final response = await action(); if (!response.success || response.data == null) { - return ApiResponse.fail(response.message ?? '操作失败'); + return ApiResponse.fail(response.message ?? '操作失敗'); } return _handleAuthSuccess(response.data!, response.message); } catch (e) { - return ApiResponse.fail('操作失败: $e'); + return ApiResponse.fail('操作失敗: $e'); } finally { _setLoading(false); } } - /// 处理认证成功 + /// 處理認證成功 ApiResponse _handleAuthSuccess( Map data, String? message, @@ -107,17 +107,17 @@ class AuthProvider extends ChangeNotifier { return _user != null ? ApiResponse.success(_user!, message) - : ApiResponse.fail('用户信息获取失败'); + : ApiResponse.fail('用戶信息獲取失敗'); } - /// 退出登录 + /// 退出登錄 Future logout() async { _setLoading(true); try { await _userService.logout(); } catch (_) { - // 忽略退出登录的接口错误 + // 忽略退出登錄的接口錯誤 } _clearAuthState(); @@ -131,13 +131,13 @@ class AuthProvider extends ChangeNotifier { _isLoggedIn = false; } - /// 强制登出(token 过期时由 DioClient 回调触发) + /// 強制登出(token 過期時由 DioClient 回調觸發) void forceLogout() { _clearAuthState(); notifyListeners(); } - /// 刷新用户信息 + /// 刷新用戶信息 Future refreshUserInfo() async { if (!_isLoggedIn) return; @@ -149,11 +149,11 @@ class AuthProvider extends ChangeNotifier { notifyListeners(); } } catch (_) { - // 忽略错误 + // 忽略錯誤 } } - /// 提交KYC实名认证(真实图片上传) + /// 提交KYC實名認證(真實圖片上傳) Future> submitKyc( Uint8List frontBytes, Uint8List backBytes) async { try { @@ -164,7 +164,7 @@ class AuthProvider extends ChangeNotifier { } return response; } catch (e) { - return ApiResponse.fail('KYC提交失败: $e'); + return ApiResponse.fail('KYC提交失敗: $e'); } } diff --git a/flutter_monisuo/lib/providers/market_provider.dart b/flutter_monisuo/lib/providers/market_provider.dart index 0094b93..0545187 100644 --- a/flutter_monisuo/lib/providers/market_provider.dart +++ b/flutter_monisuo/lib/providers/market_provider.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import '../data/models/coin.dart'; import '../data/services/market_service.dart'; -/// 行情状态管理 +/// 行情狀態管理 class MarketProvider extends ChangeNotifier { final MarketService _marketService; @@ -18,16 +18,16 @@ class MarketProvider extends ChangeNotifier { bool get isLoading => _isLoading; String? get error => _error; - /// BTC 和 ETH(上半区展示) + /// BTC 和 ETH(上半區展示) List get featuredCoins => _allCoins.where((c) => c.code == 'BTC' || c.code == 'ETH').toList(); - /// 排除 BTC、ETH、USDT 的代币列表(下半区展示) + /// 排除 BTC、ETH、USDT 的代幣列表(下半區展示) List get otherCoins => _allCoins .where((c) => !{'BTC', 'ETH', 'USDT'}.contains(c.code)) .toList(); - /// 加载币种列表 + /// 加載幣種列表 Future loadCoins({bool force = false}) async { if (_coinsLoaded && !force && _allCoins.isNotEmpty) { return; @@ -47,14 +47,14 @@ class MarketProvider extends ChangeNotifier { _error = response.message; } } catch (e) { - _error = '加载失败: $e'; + _error = '加載失敗: $e'; } _isLoading = false; notifyListeners(); } - /// 根据代码获取币种 + /// 根據代碼獲取幣種 Coin? getCoinByCode(String code) { try { return _allCoins.firstWhere((c) => c.code == code); @@ -68,7 +68,7 @@ class MarketProvider extends ChangeNotifier { await loadCoins(force: true); } - /// 重置加载状态(用于退出登录时) + /// 重置加載狀態(用於退出登錄時) void resetLoadState() { _coinsLoaded = false; _allCoins = []; diff --git a/flutter_monisuo/lib/providers/theme_provider.dart b/flutter_monisuo/lib/providers/theme_provider.dart index d54dc63..ebd0ca9 100644 --- a/flutter_monisuo/lib/providers/theme_provider.dart +++ b/flutter_monisuo/lib/providers/theme_provider.dart @@ -1,24 +1,24 @@ import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; -/// 主题提供者 - 管理明暗主题切换 +/// 主題提供者 - 管理明暗主題切換 /// /// 功能: -/// - 支持浅色/深色/跟随系统三种模式 -/// - 持久化主题设置到本地存储 -/// - 提供主题切换方法 +/// - 支持淺色/深色/跟隨系統三種模式 +/// - 持久化主題設置到本地存儲 +/// - 提供主題切換方法 class ThemeProvider extends ChangeNotifier { static const String _themeModeKey = 'theme_mode'; ThemeMode _themeMode = ThemeMode.dark; - /// 当前主题模式 + /// 當前主題模式 ThemeMode get themeMode => _themeMode; - /// 是否为深色模式 + /// 是否為深色模式 bool get isDarkMode => _themeMode == ThemeMode.dark; - /// 初始化主题设置(从本地存储加载) + /// 初始化主題設置(從本地存儲加載) Future init() async { final prefs = await SharedPreferences.getInstance(); final modeString = prefs.getString(_themeModeKey); @@ -32,14 +32,14 @@ class ThemeProvider extends ChangeNotifier { } } - /// 切换主题(浅色/深色) + /// 切換主題(淺色/深色) Future toggleTheme() async { _themeMode = _themeMode == ThemeMode.light ? ThemeMode.dark : ThemeMode.light; await _saveThemeMode(); notifyListeners(); } - /// 设置主题模式 + /// 設置主題模式 Future setThemeMode(ThemeMode mode) async { if (_themeMode == mode) return; _themeMode = mode; @@ -47,7 +47,7 @@ class ThemeProvider extends ChangeNotifier { notifyListeners(); } - /// 保存主题设置到本地存储 + /// 保存主題設置到本地存儲 Future _saveThemeMode() async { final prefs = await SharedPreferences.getInstance(); await prefs.setString(_themeModeKey, _themeMode.toString()); diff --git a/flutter_monisuo/lib/ui/components/asset_card.dart b/flutter_monisuo/lib/ui/components/asset_card.dart index a2ee5ac..40377a9 100644 --- a/flutter_monisuo/lib/ui/components/asset_card.dart +++ b/flutter_monisuo/lib/ui/components/asset_card.dart @@ -4,13 +4,13 @@ import 'package:flutter_animate/flutter_animate.dart'; import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_theme_extension.dart'; -/// 资产卡片组件 - 用于显示资产总览 +/// 資產卡片組件 - 用於顯示資產總覽 /// -/// 设计规则 ("The Kinetic Vault"): -/// - 渐变背景: Neon Blue → Electric Purple -/// - 圆角: xl (16px) -/// - 无边框,使用渐变层次 -/// - 微妙阴影: 10% black, blur 10px +/// 設計規則 ("The Kinetic Vault"): +/// - 漸變背景: Neon Blue → Electric Purple +/// - 圓角: xl (16px) +/// - 無邊框,使用漸變層次 +/// - 微妙陰影: 10% black, blur 10px class AssetCard extends StatelessWidget { final String title; final String balance; @@ -23,7 +23,7 @@ class AssetCard extends StatelessWidget { const AssetCard({ super.key, - this.title = '总资产', + this.title = '總資產', required this.balance, this.subtitle, this.profit, @@ -40,7 +40,7 @@ class AssetCard extends StatelessWidget { final appColors = context.appColors; final cardGradient = gradient ?? appColors.assetGradient; - // 主题感知颜色 - 在渐变背景上使用 onPrimary + // 主題感知顏色 - 在漸變背景上使用 onPrimary final primaryTextColor = colorScheme.onPrimary; final secondaryTextColor = colorScheme.onPrimary.withValues(alpha: 0.7); @@ -63,7 +63,7 @@ class AssetCard extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 标题行 + // 標題行 Row( children: [ Text( @@ -80,7 +80,7 @@ class AssetCard extends StatelessWidget { ], ), const SizedBox(height: AppSpacing.sm), - // 余额 - 大标题 + // 餘額 - 大標題 Text( balance, style: theme.textTheme.h1.copyWith( @@ -89,7 +89,7 @@ class AssetCard extends StatelessWidget { fontSize: 20, ), ), - // 盈亏信息 + // 盈虧信息 if (profit != null) ...[ const SizedBox(height: AppSpacing.md), Row( @@ -101,13 +101,13 @@ class AssetCard extends StatelessWidget { ), const SizedBox(width: 6), Text( - '盈亏: $profit', + '盈虧: $profit', style: theme.textTheme.small.copyWith(color: secondaryTextColor), ), ], ), ], - // 子项 + // 子項 if (items != null && items!.isNotEmpty) ...[ const SizedBox(height: AppSpacing.lg), Row( @@ -143,7 +143,7 @@ class AssetCard extends StatelessWidget { } } -/// 资产子项 +/// 資產子項 class AssetItem { final String label; final String value; @@ -154,12 +154,12 @@ class AssetItem { }); } -/// 简洁资产卡片 - 用于列表中显示 +/// 簡潔資產卡片 - 用於列表中顯示 /// -/// 设计规则: -/// - 使用 surface 层次而非边框 -/// - 圆角: xl (16px) -/// - 涨跌标签: 15% 透明度背景 +/// 設計規則: +/// - 使用 surface 層次而非邊框 +/// - 圓角: xl (16px) +/// - 漲跌標籤: 15% 透明度背景 class AssetCardCompact extends StatelessWidget { final String title; final String balance; diff --git a/flutter_monisuo/lib/ui/components/coin_card.dart b/flutter_monisuo/lib/ui/components/coin_card.dart index 570f4df..2841750 100644 --- a/flutter_monisuo/lib/ui/components/coin_card.dart +++ b/flutter_monisuo/lib/ui/components/coin_card.dart @@ -3,12 +3,12 @@ import 'package:shadcn_ui/shadcn_ui.dart'; import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_theme_extension.dart'; -/// 币种卡片组件 - 用于显示币种信息 +/// 幣種卡片組件 - 用於顯示幣種信息 /// -/// 设计规则: -/// - 使用 surface 层次而非边框 -/// - 圆角: xl (16px) 卡片, sm (4px) 涨跌标签 -/// - 涨跌标签: 15% 透明度背景 +/// 設計規則: +/// - 使用 surface 層次而非邊框 +/// - 圓角: xl (16px) 卡片, sm (4px) 漲跌標籤 +/// - 漲跌標籤: 15% 透明度背景 class CoinCard extends StatelessWidget { final String code; final String name; @@ -39,7 +39,7 @@ class CoinCard extends StatelessWidget { onTap: onTap, child: Row( children: [ - // 图标 - 圆形 + // 圖標 - 圓形 Container( width: 44, height: 44, @@ -59,7 +59,7 @@ class CoinCard extends StatelessWidget { ), ), const SizedBox(width: AppSpacing.sm), - // 名称 + // 名稱 Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -77,7 +77,7 @@ class CoinCard extends StatelessWidget { ], ), ), - // 涨跌幅 - Dynamic Chip + // 漲跌幅 - Dynamic Chip Container( padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6), decoration: BoxDecoration( diff --git a/flutter_monisuo/lib/ui/components/components.dart b/flutter_monisuo/lib/ui/components/components.dart index c845710..7c09811 100644 --- a/flutter_monisuo/lib/ui/components/components.dart +++ b/flutter_monisuo/lib/ui/components/components.dart @@ -1,4 +1,4 @@ -/// 自定义组件导出 +/// 自定義組件導出 library components; export 'coin_card.dart'; diff --git a/flutter_monisuo/lib/ui/components/glass_panel.dart b/flutter_monisuo/lib/ui/components/glass_panel.dart index 67bc0fa..4aec76b 100644 --- a/flutter_monisuo/lib/ui/components/glass_panel.dart +++ b/flutter_monisuo/lib/ui/components/glass_panel.dart @@ -2,43 +2,43 @@ import 'package:flutter/material.dart'; import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_theme_extension.dart'; -/// GlassPanel - 实心背景面板 +/// GlassPanel - 實心背景面板 /// -/// Material Design 3 风格的实心背景容器 -/// 用于卡片、弹窗、底部抽屉等需要清晰背景的容器 +/// Material Design 3 風格的實心背景容器 +/// 用於卡片、彈窗、底部抽屜等需要清晰背景的容器 /// /// 示例: /// ```dart /// GlassPanel( -/// child: Text('内容'), +/// child: Text('內容'), /// ) /// ``` class GlassPanel extends StatelessWidget { - /// 子组件 + /// 子組件 final Widget child; - /// 背景色,默认使用 surfaceContainer + /// 背景色,默認使用 surfaceContainer final Color? backgroundColor; - /// 边框色 + /// 邊框色 final Color? borderColor; - /// 圆角,默认特大圆角 + /// 圓角,默認特大圓角 final BorderRadius? borderRadius; - /// 内边距 + /// 內邊距 final EdgeInsetsGeometry? padding; - /// 外边距 + /// 外邊距 final EdgeInsetsGeometry? margin; - /// 宽度 + /// 寬度 final double? width; /// 高度 final double? height; - /// 是否显示边框 + /// 是否顯示邊框 final bool showBorder; const GlassPanel({ @@ -88,33 +88,33 @@ class GlassPanel extends StatelessWidget { } } -/// GlassCard - 带实心背景的卡片 +/// GlassCard - 帶實心背景的卡片 /// -/// 用于列表项、信息展示等场景 -/// 预设了常用配置,简化使用 +/// 用於列表項、信息展示等場景 +/// 預設了常用配置,簡化使用 class GlassCard extends StatelessWidget { - /// 子组件 + /// 子組件 final Widget child; - /// 点击回调 + /// 點擊回調 final VoidCallback? onTap; - /// 长按回调 + /// 長按回調 final VoidCallback? onLongPress; - /// 内边距 + /// 內邊距 final EdgeInsetsGeometry? padding; - /// 外边距 + /// 外邊距 final EdgeInsetsGeometry? margin; - /// 圆角 + /// 圓角 final BorderRadius? borderRadius; - /// 是否显示霓虹光效 + /// 是否顯示霓虹光效 final bool showNeonGlow; - /// 霓虹光效颜色 + /// 霓虹光效顏色 final Color? neonGlowColor; const GlassCard({ @@ -170,20 +170,20 @@ class GlassCard extends StatelessWidget { } } -/// GlassBottomSheet - 实心背景底部抽屉 +/// GlassBottomSheet - 實心背景底部抽屜 /// -/// 用于弹出的底部面板 +/// 用於彈出的底部面板 class GlassBottomSheet extends StatelessWidget { - /// 子组件 + /// 子組件 final Widget child; - /// 标题 + /// 標題 final String? title; - /// 是否显示关闭按钮 + /// 是否顯示關閉按鈕 final bool showCloseButton; - /// 内边距 + /// 內邊距 final EdgeInsetsGeometry? padding; const GlassBottomSheet({ @@ -209,7 +209,7 @@ class GlassBottomSheet extends StatelessWidget { child: Column( mainAxisSize: MainAxisSize.min, children: [ - // 顶部拖动条 + // 頂部拖動條 Container( margin: const EdgeInsets.only(top: 12, bottom: 8), width: 40, @@ -219,7 +219,7 @@ class GlassBottomSheet extends StatelessWidget { borderRadius: BorderRadius.circular(2), ), ), - // 标题栏 + // 標題欄 if (title != null || showCloseButton) Padding( padding: EdgeInsets.fromLTRB( @@ -261,7 +261,7 @@ class GlassBottomSheet extends StatelessWidget { ], ), ), - // 内容 + // 內容 Padding( padding: padding ?? EdgeInsets.fromLTRB( @@ -277,7 +277,7 @@ class GlassBottomSheet extends StatelessWidget { ); } - /// 显示底部抽屉 + /// 顯示底部抽屜 static Future show({ required BuildContext context, required Widget Function(BuildContext) builder, diff --git a/flutter_monisuo/lib/ui/components/gradient_button.dart b/flutter_monisuo/lib/ui/components/gradient_button.dart index b6edb43..06d5a15 100644 --- a/flutter_monisuo/lib/ui/components/gradient_button.dart +++ b/flutter_monisuo/lib/ui/components/gradient_button.dart @@ -2,12 +2,12 @@ import 'package:flutter/material.dart'; import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_theme_extension.dart'; -/// 渐变按钮组件 - 支持 CTA 渐变效果 +/// 漸變按鈕組件 - 支持 CTA 漸變效果 /// -/// 设计规则: -/// - 渐变方向: 135度 (primary → primary_container) -/// - 圆角: xxl (24px / 1.5rem) -/// - 无边框 +/// 設計規則: +/// - 漸變方向: 135度 (primary → primary_container) +/// - 圓角: xxl (24px / 1.5rem) +/// - 無邊框 class GradientButton extends StatelessWidget { final String text; final VoidCallback? onPressed; @@ -28,7 +28,7 @@ class GradientButton extends StatelessWidget { this.height = 48, }); - /// CTA 按钮 - 使用主题渐变 + /// CTA 按鈕 - 使用主題漸變 factory GradientButton.cta({ Key? key, required String text, @@ -47,7 +47,7 @@ class GradientButton extends StatelessWidget { ); } - /// 买入按钮 - 翡翠绿渐变 + /// 買入按鈕 - 翡翠綠漸變 factory GradientButton.buy({ Key? key, required String text, @@ -67,7 +67,7 @@ class GradientButton extends StatelessWidget { ); } - /// 卖出按钮 - 红色渐变 + /// 賣出按鈕 - 紅色漸變 factory GradientButton.sell({ Key? key, required String text, @@ -93,7 +93,7 @@ class GradientButton extends StatelessWidget { final colorScheme = context.colors; final buttonGradient = gradient ?? appColors.ctaGradient; - // 主题感知颜色 - 在渐变背景上使用 onPrimary + // 主題感知顏色 - 在漸變背景上使用 onPrimary final textColor = colorScheme.onPrimary; return Container( @@ -145,11 +145,11 @@ class GradientButton extends StatelessWidget { } } -/// Ghost 按钮 - 次要操作 +/// Ghost 按鈕 - 次要操作 /// -/// 设计规则: +/// 設計規則: /// - Ghost Border: 15% opacity outline-variant -/// - 圆角: xxl (24px) +/// - 圓角: xxl (24px) /// - 主色文字 class GhostButton extends StatelessWidget { final String text; diff --git a/flutter_monisuo/lib/ui/components/neon_glow.dart b/flutter_monisuo/lib/ui/components/neon_glow.dart index 2840e37..3bdcaa3 100644 --- a/flutter_monisuo/lib/ui/components/neon_glow.dart +++ b/flutter_monisuo/lib/ui/components/neon_glow.dart @@ -3,30 +3,30 @@ import '../../core/theme/app_color_scheme.dart'; import '../../core/theme/app_spacing.dart'; import '../../core/theme/app_theme_extension.dart'; -/// NeonGlow - 霓虹光效组件 +/// NeonGlow - 霓虹光效組件 /// -/// Material Design 3 风格的霓虹光效 -/// 用于按钮、卡片、图标等需要突出显示的元素 +/// Material Design 3 風格的霓虹光效 +/// 用於按鈕、卡片、圖標等需要突出顯示的元素 /// -/// 光效类型: +/// 光效類型: /// - Primary: 青色光效 (#72dcff) /// - Secondary: 紫色光效 (#dd8bfb) -/// - Tertiary: 绿色光效 (#afffd1) -/// - Error: 红色光效 (#ff716c) +/// - Tertiary: 綠色光效 (#afffd1) +/// - Error: 紅色光效 (#ff716c) class NeonGlow extends StatelessWidget { - /// 子组件 + /// 子組件 final Widget child; - /// 光效颜色 + /// 光效顏色 final Color glowColor; - /// 模糊半径,默认 15.0 + /// 模糊半徑,默認 15.0 final double blurRadius; - /// 扩散半径,默认 0.0 + /// 擴散半徑,默認 0.0 final double spreadRadius; - /// 圆角 + /// 圓角 final BorderRadius? borderRadius; const NeonGlow({ @@ -70,7 +70,7 @@ class NeonGlow extends StatelessWidget { ); } - /// Tertiary 霓虹光效 (绿色) + /// Tertiary 霓虹光效 (綠色) factory NeonGlow.tertiary({ Key? key, required Widget child, @@ -86,7 +86,7 @@ class NeonGlow extends StatelessWidget { ); } - /// Error 霓虹光效 (红色) + /// Error 霓虹光效 (紅色) factory NeonGlow.error({ Key? key, required Widget child, @@ -122,32 +122,32 @@ class NeonGlow extends StatelessWidget { } } -/// NeonButton - 带霓虹光效的按钮 +/// NeonButton - 帶霓虹光效的按鈕 /// -/// 预设了常用配置,简化使用 +/// 預設了常用配置,簡化使用 class NeonButton extends StatefulWidget { - /// 按钮文本 + /// 按鈕文本 final String text; - /// 点击回调 + /// 點擊回調 final VoidCallback? onPressed; - /// 按钮类型 + /// 按鈕類型 final NeonButtonType type; - /// 是否显示光效 + /// 是否顯示光效 final bool showGlow; - /// 图标 + /// 圖標 final IconData? icon; - /// 是否加载中 + /// 是否加載中 final bool isLoading; - /// 按钮宽度 + /// 按鈕寬度 final double? width; - /// 按钮高度,默认 48 + /// 按鈕高度,默認 48 final double height; const NeonButton({ @@ -258,7 +258,7 @@ class _NeonButtonState extends State } LinearGradient? get _gradient { - // 【优化】移除所有渐变效果,改为纯色背景,提升专业金融感 + // 【優化】移除所有漸變效果,改為純色背景,提升專業金融感 return null; } @@ -335,39 +335,39 @@ class _NeonButtonState extends State } } -/// 按钮类型 +/// 按鈕類型 enum NeonButtonType { - /// 主要按钮 (青色) + /// 主要按鈕 (青色) primary, - /// 次要按钮 (紫色) + /// 次要按鈕 (紫色) secondary, - /// 成功按钮 (绿色) + /// 成功按鈕 (綠色) tertiary, - /// 危险按钮 (红色) + /// 危險按鈕 (紅色) error, - /// 边框按钮 + /// 邊框按鈕 outline, } -/// NeonIcon - 带霓虹光效的图标 +/// NeonIcon - 帶霓虹光效的圖標 class NeonIcon extends StatelessWidget { - /// 图标 + /// 圖標 final IconData icon; - /// 图标大小 + /// 圖標大小 final double size; - /// 图标颜色 + /// 圖標顏色 final Color color; - /// 光效颜色,默认使用图标颜色 + /// 光效顏色,默認使用圖標顏色 final Color? glowColor; - /// 光效模糊半径 + /// 光效模糊半徑 final double glowBlur; const NeonIcon({ diff --git a/flutter_monisuo/lib/ui/components/trade_button.dart b/flutter_monisuo/lib/ui/components/trade_button.dart index 77c6c44..8766bf5 100644 --- a/flutter_monisuo/lib/ui/components/trade_button.dart +++ b/flutter_monisuo/lib/ui/components/trade_button.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import '../../core/theme/app_color_scheme.dart'; import '../../core/theme/app_spacing.dart'; -/// 交易按钮组件 - 买入/卖出按钮 +/// 交易按鈕組件 - 買入/賣出按鈕 /// -/// 设计规则: -/// - 渐变按钮: 135度渐变 -/// - 圆角: xxl (24px / 1.5rem) -/// - 买入: 翡翠绿渐变 -/// - 卖出: 红色渐变 +/// 設計規則: +/// - 漸變按鈕: 135度漸變 +/// - 圓角: xxl (24px / 1.5rem) +/// - 買入: 翡翠綠漸變 +/// - 賣出: 紅色漸變 class TradeButton extends StatelessWidget { final bool isBuy; final String? coinCode; @@ -25,7 +25,7 @@ class TradeButton extends StatelessWidget { this.fullWidth = false, }); - /// 买入按钮 + /// 買入按鈕 const TradeButton.buy({ super.key, this.coinCode, @@ -34,7 +34,7 @@ class TradeButton extends StatelessWidget { this.fullWidth = false, }) : isBuy = true; - /// 卖出按钮 + /// 賣出按鈕 const TradeButton.sell({ super.key, this.coinCode, @@ -48,10 +48,10 @@ class TradeButton extends StatelessWidget { final colorScheme = Theme.of(context).colorScheme; final gradient = isBuy ? AppColorScheme.buyGradient : AppColorScheme.sellGradient; final text = isBuy - ? '买入${coinCode != null ? ' $coinCode' : ''}' - : '卖出${coinCode != null ? ' $coinCode' : ''}'; + ? '買入${coinCode != null ? ' $coinCode' : ''}' + : '賣出${coinCode != null ? ' $coinCode' : ''}'; - // 主题感知颜色 - 在渐变背景上使用 onPrimary + // 主題感知顏色 - 在漸變背景上使用 onPrimary final textColor = colorScheme.onPrimary; return Container( @@ -103,7 +103,7 @@ class TradeButton extends StatelessWidget { } } -/// 交易按钮组 - 同时显示买入和卖出按钮 +/// 交易按鈕組 - 同時顯示買入和賣出按鈕 class TradeButtonGroup extends StatelessWidget { final String? coinCode; final VoidCallback? onBuyPressed; diff --git a/flutter_monisuo/lib/ui/pages/asset/asset_page.dart b/flutter_monisuo/lib/ui/pages/asset/asset_page.dart index 79a54ff..71330c2 100644 --- a/flutter_monisuo/lib/ui/pages/asset/asset_page.dart +++ b/flutter_monisuo/lib/ui/pages/asset/asset_page.dart @@ -13,7 +13,7 @@ import 'components/records_link_row.dart'; import '../orders/fund_orders_page.dart'; import 'transfer_page.dart'; -/// 资产页面 - Matching .pen design spec (CMcqs) +/// 資產頁面 - Matching .pen design spec (CMcqs) class AssetPage extends StatefulWidget { const AssetPage({super.key}); @@ -78,24 +78,24 @@ class _AssetPageState extends State with AutomaticKeepAliveClientMixi Padding( padding: const EdgeInsets.only(top: 16, bottom: 8), child: Text( - '资产', + '資產', style: AppTextStyles.displaySmall(context), ), ), const SizedBox(height: AppSpacing.sm), - // 资金账户 + 交易账户 左右并排 + // 資金賬戶 + 交易賬戶 左右並排 Row( children: [ Expanded( child: BalanceCard( - label: '资金账户', + label: '資金賬戶', balance: provider.fundAccount?.balance ?? provider.overview?.fundBalance ?? '0.00', ), ), const SizedBox(width: AppSpacing.sm), Expanded( child: BalanceCard( - label: '交易账户', + label: '交易賬戶', balance: _calculateTradeTotal(provider), ), ), diff --git a/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart b/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart index fa3c51d..1fda48e 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/account_tab_switcher.dart @@ -3,7 +3,7 @@ import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_theme_extension.dart'; import '../../../../core/theme/app_spacing.dart'; -/// 账户标签切换器 — .pen node UE6xC +/// 賬戶標籤切換器 — .pen node UE6xC /// height: 40, padding: 3, cornerRadius: md, fill: $bg-tertiary /// activeTab: fill $bg-primary, cornerRadius sm, shadow blur 3, color #0000000D, offset y 1 /// activeTabText: 14px, fontWeight 600, fill $text-primary @@ -31,13 +31,13 @@ class AccountTabSwitcher extends StatelessWidget { children: [ _buildTab( context: context, - label: '资金账户', + label: '資金賬戶', isSelected: selectedIndex == 0, onTap: () => onChanged(0), ), _buildTab( context: context, - label: '交易账户', + label: '交易賬戶', isSelected: selectedIndex == 1, onTap: () => onChanged(1), ), diff --git a/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart b/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart index da08045..1f80ef5 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/action_buttons_row.dart @@ -4,7 +4,7 @@ import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_theme_extension.dart'; -/// 操作按钮行 — .pen node pIpHe +/// 操作按鈕行 — .pen node pIpHe /// gap: 12, three buttons evenly distributed /// Each button: circle 48x48 fill $bg-tertiary, cornerRadius 24 /// icon: 20px $accent-primary (lucide: arrow-up-right / arrow-down-left / repeat) @@ -38,7 +38,7 @@ class ActionButtonsRow extends StatelessWidget { const SizedBox(width: 12), ActionButton( icon: LucideIcons.arrowDownLeft, - label: '提现', + label: '提現', accentColor: accentColor, bgColor: bgColor, onTap: onWithdraw, @@ -46,7 +46,7 @@ class ActionButtonsRow extends StatelessWidget { const SizedBox(width: 12), ActionButton( icon: LucideIcons.repeat, - label: '划转', + label: '劃轉', accentColor: accentColor, bgColor: bgColor, onTap: onTransfer, @@ -56,7 +56,7 @@ class ActionButtonsRow extends StatelessWidget { } } -/// 单个操作按钮 — matching .pen btn1/btn2/btn3 +/// 單個操作按鈕 — matching .pen btn1/btn2/btn3 class ActionButton extends StatelessWidget { final IconData icon; final String label; diff --git a/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart b/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart index 2078bdd..338e512 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/asset_dialogs.dart @@ -17,7 +17,7 @@ import '../../../shared/ui_constants.dart'; // Dialog helpers — shared sub-widgets // ============================================ -/// 信息行 — 用于对话框中显示 label/value 键值对 +/// 信息行 — 用於對話框中顯示 label/value 鍵值對 class InfoRow extends StatelessWidget { final String label; final String value; @@ -54,7 +54,7 @@ class InfoRow extends StatelessWidget { } } -/// 钱包地址卡片 — 用于充值结果对话框中展示钱包地址 +/// 錢包地址卡片 — 用於充值結果對話框中展示錢包地址 class WalletAddressCard extends StatelessWidget { final String address; final String network; @@ -94,7 +94,7 @@ class WalletAddressCard extends StatelessWidget { GestureDetector( onTap: () { Clipboard.setData(ClipboardData(text: address)); - ToastUtils.show('地址已复制到剪贴板'); + ToastUtils.show('地址已複製到剪貼板'); }, child: Container( padding: const EdgeInsets.all(AppSpacing.xs), @@ -113,7 +113,7 @@ class WalletAddressCard extends StatelessWidget { ), const SizedBox(height: AppSpacing.sm), Text( - '网络: $network', + '網絡: $network', style: AppTextStyles.bodySmall(context), ), ], @@ -126,7 +126,7 @@ class WalletAddressCard extends StatelessWidget { // Dialog functions — kept from original with style updates // ============================================ -/// 充值对话框 +/// 充值對話框 void showDepositDialog(BuildContext context) { final amountController = TextEditingController(); final formKey = GlobalKey(); @@ -183,14 +183,14 @@ void showDepositDialog(BuildContext context) { child: ShadInputFormField( id: 'amount', controller: amountController, - label: const Text('充值金额'), + label: const Text('充值金額'), placeholder: const Text('最低 1000 USDT'), keyboardType: const TextInputType.numberWithOptions(decimal: true), validator: (v) { - if (v == null || v.isEmpty) return '请输入金额'; + if (v == null || v.isEmpty) return '請輸入金額'; final n = double.tryParse(v); - if (n == null || n <= 0) return '请输入有效金额'; - if (n < 1000) return '单笔最低充值1000 USDT'; + if (n == null || n <= 0) return '請輸入有效金額'; + if (n < 1000) return '單筆最低充值1000 USDT'; return null; }, ), @@ -222,7 +222,7 @@ void showDepositDialog(BuildContext context) { if (response.success && response.data != null) { showDepositResultDialog(context, response.data!); } else { - showResultDialog(context, '申请失败', response.message); + showResultDialog(context, '申請失敗', response.message); } } } @@ -240,7 +240,7 @@ void showDepositDialog(BuildContext context) { ); } -/// 充值结果对话框 — 展示钱包地址和确认打款 +/// 充值結果對話框 — 展示錢包地址和確認打款 void showDepositResultDialog(BuildContext context, Map data) { final orderNo = data['orderNo'] as String? ?? ''; final amount = data['amount']?.toString() ?? '0.00'; @@ -268,7 +268,7 @@ void showDepositResultDialog(BuildContext context, Map data) { ), const SizedBox(width: AppSpacing.sm), Text( - '充值申请成功', + '充值申請成功', style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, ), @@ -276,12 +276,12 @@ void showDepositResultDialog(BuildContext context, Map data) { ], ), const SizedBox(height: AppSpacing.lg), - InfoRow(label: '订单号', value: orderNo), + InfoRow(label: '訂單號', value: orderNo), const SizedBox(height: AppSpacing.sm), - InfoRow(label: '充值金额', value: '$amount USDT', isBold: true), + InfoRow(label: '充值金額', value: '$amount USDT', isBold: true), const SizedBox(height: AppSpacing.lg), Text( - '请向以下地址转账:', + '請向以下地址轉賬:', style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), @@ -304,7 +304,7 @@ void showDepositResultDialog(BuildContext context, Map data) { const SizedBox(width: AppSpacing.sm), Expanded( child: Text( - '转账完成后请点击"已打款"按钮确认', + '轉賬完成後請點擊"已打款"按鈕確認', style: AppTextStyles.bodyMedium(context).copyWith( color: AppColorScheme.warning, ), @@ -318,7 +318,7 @@ void showDepositResultDialog(BuildContext context, Map data) { children: [ Expanded( child: NeonButton( - text: '稍后确认', + text: '稍後確認', type: NeonButtonType.outline, onPressed: () => Navigator.of(ctx).pop(), height: 44, @@ -336,8 +336,8 @@ void showDepositResultDialog(BuildContext context, Map data) { if (context.mounted) { showResultDialog( context, - response.success ? '确认成功' : '确认失败', - response.success ? '请等待管理员审核' : response.message, + response.success ? '確認成功' : '確認失敗', + response.success ? '請等待管理員審核' : response.message, ); } }, @@ -354,13 +354,13 @@ void showDepositResultDialog(BuildContext context, Map data) { ); } -/// 提现对话框 +/// 提現對話框 void showWithdrawDialog(BuildContext context, String? balance) { final amountController = TextEditingController(); final addressController = TextEditingController(); final contactController = TextEditingController(); final formKey = GlobalKey(); - final feeNotifier = ValueNotifier('提现将扣除10%手续费'); + final feeNotifier = ValueNotifier('提現將扣除10%手續費'); final networksNotifier = ValueNotifier>([]); final selectedNetworkNotifier = ValueNotifier(null); final colorScheme = Theme.of(context).colorScheme; @@ -370,13 +370,13 @@ void showWithdrawDialog(BuildContext context, String? balance) { if (amount > 0) { final fee = amount * 0.1; final receivable = amount - fee; - feeNotifier.value = '手续费(10%): -${fee.toStringAsFixed(2)} USDT | 应收款: ${receivable.toStringAsFixed(2)} USDT'; + feeNotifier.value = '手續費(10%): -${fee.toStringAsFixed(2)} USDT | 應收款: ${receivable.toStringAsFixed(2)} USDT'; } else { - feeNotifier.value = '提现将扣除10%手续费'; + feeNotifier.value = '提現將扣除10%手續費'; } }); - // 获取网络列表 + // 獲取網絡列表 context.read().getWalletNetworks().then((list) { networksNotifier.value = list; if (list.isNotEmpty) { @@ -411,7 +411,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { ), const SizedBox(width: AppSpacing.sm), Text( - '提现', + '提現', style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, ), @@ -420,7 +420,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { ), const SizedBox(height: AppSpacing.xs), Text( - '安全地将您的资产转移到外部钱包地址', + '安全地將您的資產轉移到外部錢包地址', style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), @@ -443,7 +443,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { mainAxisSize: MainAxisSize.min, children: [ Text( - '可用余额: ', + '可用餘額: ', style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant, ), @@ -467,13 +467,13 @@ void showWithdrawDialog(BuildContext context, String? balance) { ShadInputFormField( id: 'amount', controller: amountController, - label: const Text('提现金额'), - placeholder: const Text('请输入提现金额(USDT)'), + label: const Text('提現金額'), + placeholder: const Text('請輸入提現金額(USDT)'), keyboardType: const TextInputType.numberWithOptions(decimal: true), validator: Validators.amount, ), const SizedBox(height: AppSpacing.md), - // 手续费/应收款提示 + // 手續費/應收款提示 ValueListenableBuilder( valueListenable: feeNotifier, builder: (_, feeText, __) { @@ -501,7 +501,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { }, ), const SizedBox(height: AppSpacing.md), - // 提现网络选择 + // 提現網絡選擇 ValueListenableBuilder>( valueListenable: networksNotifier, builder: (_, networks, __) { @@ -509,7 +509,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text('提现网络', style: AppTextStyles.bodyMedium(context).copyWith( + Text('提現網絡', style: AppTextStyles.bodyMedium(context).copyWith( fontWeight: FontWeight.w500, )), const SizedBox(height: AppSpacing.xs), @@ -517,7 +517,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { valueListenable: selectedNetworkNotifier, builder: (_, selected, __) { return ShadSelect( - placeholder: const Text('选择提现网络'), + placeholder: const Text('選擇提現網絡'), initialValue: selected, selectedOptionBuilder: (context, val) => Text(val), onChanged: (value) { @@ -535,16 +535,16 @@ void showWithdrawDialog(BuildContext context, String? balance) { ShadInputFormField( id: 'address', controller: addressController, - label: const Text('目标地址'), - placeholder: const Text('请输入提现地址'), - validator: (v) => Validators.required(v, '提现地址'), + label: const Text('目標地址'), + placeholder: const Text('請輸入提現地址'), + validator: (v) => Validators.required(v, '提現地址'), ), const SizedBox(height: AppSpacing.md), ShadInputFormField( id: 'contact', controller: contactController, - label: const Text('联系方式(可选)'), - placeholder: const Text('联系方式'), + label: const Text('聯繫方式(可選)'), + placeholder: const Text('聯繫方式'), ), ], ), @@ -580,8 +580,8 @@ void showWithdrawDialog(BuildContext context, String? balance) { if (context.mounted) { showResultDialog( context, - response.success ? '申请成功' : '申请失败', - response.success ? '请等待管理员审批' : response.message, + response.success ? '申請成功' : '申請失敗', + response.success ? '請等待管理員審批' : response.message, ); } } @@ -612,7 +612,7 @@ void showWithdrawDialog(BuildContext context, String? balance) { ); } -/// 通用结果对话框 — 展示操作成功/失败信息 +/// 通用結果對話框 — 展示操作成功/失敗信息 void showResultDialog(BuildContext context, String title, String? message) { final colorScheme = Theme.of(context).colorScheme; @@ -646,7 +646,7 @@ void showResultDialog(BuildContext context, String title, String? message) { SizedBox( width: double.infinity, child: NeonButton( - text: '确定', + text: '確定', type: NeonButtonType.primary, onPressed: () => Navigator.of(ctx).pop(), height: 44, diff --git a/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart b/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart index a60789a..92e1cd3 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/balance_card.dart @@ -4,7 +4,7 @@ import '../../../../core/theme/app_theme_extension.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../components/glass_panel.dart'; -/// 余额卡片 — 显示单个账户的 USDT 余额 +/// 餘額卡片 — 顯示單個賬戶的 USDT 餘額 class BalanceCard extends StatelessWidget { final String label; final String balance; @@ -20,7 +20,7 @@ class BalanceCard extends StatelessWidget { final displayBalance = balance; return SizedBox( - width: double.infinity, // 确保卡片撑满宽度 + width: double.infinity, // 確保卡片撐滿寬度 child: GlassPanel( padding: const EdgeInsets.all(20), borderRadius: BorderRadius.circular(AppRadius.lg), diff --git a/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart b/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart index bb46c4c..e30f4f5 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/holdings_section.dart @@ -5,8 +5,8 @@ import '../../../../core/theme/app_spacing.dart'; import '../../../../data/models/account_models.dart'; import '../../../components/glass_panel.dart'; -/// 持仓区域 -/// Header: "我的资产" + "查看全部 >" +/// 持倉區域 +/// Header: "我的資產" + "查看全部 >" /// Holdings Card: cornerRadius lg, fill $surface-card, stroke $border-default 1px class HoldingsSection extends StatelessWidget { final List holdings; @@ -19,14 +19,14 @@ class HoldingsSection extends StatelessWidget { return Column( children: [ - // Header row: "我的资产" + "查看全部 >" + // Header row: "我的資產" + "查看全部 >" Padding( padding: const EdgeInsets.only(bottom: AppSpacing.sm), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '我的资产', + '我的資產', style: AppTextStyles.headlineLarge(context), ), Text( @@ -44,7 +44,7 @@ class HoldingsSection extends StatelessWidget { Padding( padding: const EdgeInsets.all(AppSpacing.xl), child: Text( - '暂无持仓', + '暫無持倉', style: AppTextStyles.bodyLarge(context).copyWith( color: colorScheme.onSurfaceVariant, ), @@ -78,7 +78,7 @@ class HoldingsSection extends StatelessWidget { } } -/// 持仓行分隔线 — .pen node BCCbR / yejhE +/// 持倉行分隔線 — .pen node BCCbR / yejhE /// fill: $border-default, height: 1, opacity: 0.5 class HoldingDivider extends StatelessWidget { const HoldingDivider({super.key}); @@ -94,7 +94,7 @@ class HoldingDivider extends StatelessWidget { } } -/// 持仓行 — matching .pen nodes dAt4j / eK6vq / jiSUK +/// 持倉行 — matching .pen nodes dAt4j / eK6vq / jiSUK /// padding [14, 16], space_between layout /// Left: avatar circle (36x36, radius 18, fill $accent-light) + coin info (gap 2) /// Right: value + pnl (gap 2, align end) diff --git a/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart b/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart index 9ec097c..824454c 100644 --- a/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart +++ b/flutter_monisuo/lib/ui/pages/asset/components/records_link_row.dart @@ -5,7 +5,7 @@ import '../../../../core/theme/app_theme_extension.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../components/glass_panel.dart'; -/// 订单记录链接行 +/// 訂單記錄鏈接行 /// cornerRadius: lg, fill: $surface-card, padding: [14, 16], stroke: $border-default 1px class RecordsLinkRow extends StatelessWidget { final VoidCallback onTap; @@ -25,7 +25,7 @@ class RecordsLinkRow extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '订单记录', + '訂單記錄', style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.w500, ), diff --git a/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart b/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart index 2bf9c87..0de350a 100644 --- a/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart +++ b/flutter_monisuo/lib/ui/pages/asset/transfer_page.dart @@ -8,7 +8,7 @@ import '../../../core/theme/app_spacing.dart'; import '../../../providers/asset_provider.dart'; import '../../../data/models/account_models.dart'; -/// 划转页面 +/// 劃轉頁面 class TransferPage extends StatefulWidget { const TransferPage({super.key}); @@ -19,7 +19,7 @@ class TransferPage extends StatefulWidget { class _TransferPageState extends State { final _amountController = TextEditingController(); final _focusNode = FocusNode(); - int _direction = 1; // 1: 资金→交易, 2: 交易→资金 + int _direction = 1; // 1: 資金→交易, 2: 交易→資金 bool _isLoading = false; @override @@ -38,26 +38,26 @@ class _TransferPageState extends State { } // ============================================ - // 数据访问 + // 數據訪問 // ============================================ - /// 获取资金账户余额(安全检查) + /// 獲取資金賬戶餘額(安全檢查) String get _fundBalance { try { final provider = context.read(); final balance = provider.fundAccount?.balance ?? provider.overview?.fundBalance ?? '0.00'; - // 确保返回的是有效的数字格式 + // 確保返回的是有效的數字格式 return _formatBalance(balance); } catch (e) { return '0.00'; } } - /// 获取交易账户 USDT 余额(安全检查) + /// 獲取交易賬戶 USDT 餘額(安全檢查) String get _tradeUsdtBalance { try { final provider = context.read(); - // 先检查列表是否为空 + // 先檢查列表是否為空 if (provider.tradeAccounts.isEmpty) { return '0.00'; } @@ -81,32 +81,32 @@ class _TransferPageState extends State { } } - /// 获取当前可用余额(根据方向) + /// 獲取當前可用餘額(根據方向) String get _availableBalance => _direction == 1 ? _fundBalance : _tradeUsdtBalance; - /// 从账户名 - String get _fromLabel => _direction == 1 ? '资金账户' : '交易账户'; - String get _toLabel => _direction == 1 ? '交易账户' : '资金账户'; + /// 從賬戶名 + String get _fromLabel => _direction == 1 ? '資金賬戶' : '交易賬戶'; + String get _toLabel => _direction == 1 ? '交易賬戶' : '資金賬戶'; String get _fromBalance => _direction == 1 ? _fundBalance : _tradeUsdtBalance; String get _toBalance => _direction == 1 ? _tradeUsdtBalance : _fundBalance; // ============================================ - // 业务逻辑 + // 業務邏輯 // ============================================ - /// 执行划转 + /// 執行劃轉 Future _doTransfer() async { final amount = _amountController.text; final available = double.tryParse(_availableBalance) ?? 0; final transferAmount = double.tryParse(amount) ?? 0; if (transferAmount <= 0) { - _showSnackBar('请输入有效的划转金额'); + _showSnackBar('請輸入有效的劃轉金額'); return; } if (transferAmount > available) { - _showSnackBar('余额不足'); + _showSnackBar('餘額不足'); return; } @@ -121,10 +121,10 @@ class _TransferPageState extends State { if (mounted) { if (response.success) { _amountController.clear(); - _showSnackBar('划转成功'); + _showSnackBar('劃轉成功'); Navigator.of(context).pop(true); } else { - _showSnackBar(response.message ?? '划转失败'); + _showSnackBar(response.message ?? '劃轉失敗'); } } } finally { @@ -140,14 +140,14 @@ class _TransferPageState extends State { ); } - /// 设置快捷百分比金额 + /// 設置快捷百分比金額 void _setQuickAmount(double percent) { final available = double.tryParse(_availableBalance) ?? 0; final amount = available * percent; _amountController.text = amount.toStringAsFixed(8).replaceAll(RegExp(r'\.?0+$'), ''); } - /// 切换方向 + /// 切換方向 void _toggleDirection() { setState(() { _direction = _direction == 1 ? 2 : 1; @@ -155,7 +155,7 @@ class _TransferPageState extends State { } // ============================================ - // 构建 UI + // 構建 UI // ============================================ @override @@ -173,7 +173,7 @@ class _TransferPageState extends State { onPressed: () => Navigator.of(context).pop(), ), title: Text( - '账户划转', + '賬戶劃轉', style: AppTextStyles.headlineLarge(context), ), centerTitle: true, @@ -205,7 +205,7 @@ class _TransferPageState extends State { Widget _buildTransferDirectionCard() { final colorScheme = Theme.of(context).colorScheme; - // 金色主题感知: Dark #D4AF37 (primary), Light #F59E0B (secondary) + // 金色主題感知: Dark #D4AF37 (primary), Light #F59E0B (secondary) final goldAccent = colorScheme.brightness == Brightness.dark ? colorScheme.primary : colorScheme.secondary; @@ -225,7 +225,7 @@ class _TransferPageState extends State { key: 'src-$_direction', beginOffset: const Offset(0, -1), child: _buildAccountRow( - label: '从', + label: '從', accountName: _fromLabel, balance: _fromBalance, ), @@ -239,7 +239,7 @@ class _TransferPageState extends State { height: 40, margin: const EdgeInsets.symmetric(vertical: AppSpacing.md), decoration: BoxDecoration( - // 椭圆形半透明金色背景 + // 橢圓形半透明金色背景 color: goldAccent.withValues(alpha: 0.15), shape: BoxShape.circle, border: Border.all( @@ -272,7 +272,7 @@ class _TransferPageState extends State { ); } - /// 统一的 AnimatedSwitcher 构造 + /// 統一的 AnimatedSwitcher 構造 Widget _animatedSwitcher({ required String key, required Offset beginOffset, @@ -313,7 +313,7 @@ class _TransferPageState extends State { Row( children: [ Icon( - label == '从' ? LucideIcons.wallet : LucideIcons.trendingUp, + label == '從' ? LucideIcons.wallet : LucideIcons.trendingUp, size: 18, color: colorScheme.onSurfaceVariant, ), @@ -342,14 +342,14 @@ class _TransferPageState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // Label row: "划转金额" + "全部划转" + // Label row: "劃轉金額" + "全部劃轉" Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('划转金额', style: AppTextStyles.headlineSmall(context).copyWith(color: colorScheme.onSurfaceVariant)), + Text('劃轉金額', style: AppTextStyles.headlineSmall(context).copyWith(color: colorScheme.onSurfaceVariant)), GestureDetector( onTap: () => _setQuickAmount(1.0), - child: Text('全部划转', style: AppTextStyles.labelLarge(context).copyWith( + child: Text('全部劃轉', style: AppTextStyles.labelLarge(context).copyWith( color: colorScheme.secondary, fontWeight: FontWeight.w600, )), @@ -461,7 +461,7 @@ class _TransferPageState extends State { const SizedBox(width: AppSpacing.sm), Expanded( child: Text( - '划转即时到账,无需手续费', + '劃轉即時到賬,無需手續費', style: AppTextStyles.bodyMedium(context).copyWith(color: upColor), ), ), @@ -472,7 +472,7 @@ class _TransferPageState extends State { Widget _buildConfirmButton() { final colorScheme = Theme.of(context).colorScheme; - // 金色主题感知: Dark #D4AF37 (primary), Light #F59E0B (secondary) + // 金色主題感知: Dark #D4AF37 (primary), Light #F59E0B (secondary) final goldAccent = colorScheme.brightness == Brightness.dark ? colorScheme.primary : colorScheme.secondary; @@ -498,7 +498,7 @@ class _TransferPageState extends State { ), ) : const Text( - '确认划转', + '確認劃轉', style: TextStyle( color: Colors.white, fontSize: 16, diff --git a/flutter_monisuo/lib/ui/pages/auth/login_page.dart b/flutter_monisuo/lib/ui/pages/auth/login_page.dart index 24e21a5..a2a9b10 100644 --- a/flutter_monisuo/lib/ui/pages/auth/login_page.dart +++ b/flutter_monisuo/lib/ui/pages/auth/login_page.dart @@ -49,13 +49,13 @@ class _LoginPageState extends State { key: formKey, child: Column( children: [ - // 顶部品牌区域 + // 頂部品牌區域 _buildBrandSection(), const SizedBox(height: AppSpacing.xxl), - // 表单区域 + // 表單區域 _buildFormSection(), const SizedBox(height: AppSpacing.xl), - // 底部注册链接 + // 底部註冊鏈接 _buildRegisterRow(), ], ), @@ -66,13 +66,13 @@ class _LoginPageState extends State { } // ============================================ - // 品牌区域 - Logo + 品牌名 + 标语 + // 品牌區域 - Logo + 品牌名 + 標語 // ============================================ Widget _buildBrandSection() { return Column( children: [ - // Logo 圆形:渐变 #1F2937 → #374151,内含 "M" + // Logo 圓形:漸變 #1F2937 → #374151,內含 "M" Container( width: _logoCircleSize, height: _logoCircleSize, @@ -105,9 +105,9 @@ class _LoginPageState extends State { textAlign: TextAlign.center, ), const SizedBox(height: AppSpacing.md), - // 标语 + // 標語 Text( - '虚拟货币模拟交易平台', + '虛擬貨幣模擬交易平臺', style: AppTextStyles.bodyLarge(context).copyWith( color: context.colors.onSurfaceVariant, ), @@ -118,7 +118,7 @@ class _LoginPageState extends State { } // ============================================ - // 表单区域 - 用户名 + 密码 + 登录按钮 + // 表單區域 - 用戶名 + 密碼 + 登錄按鈕 // ============================================ Widget _buildFormSection() { @@ -139,7 +139,7 @@ class _LoginPageState extends State { height: _inputHeight, child: ShadInputFormField( id: 'username', - placeholder: const Text('请输入用户名'), + placeholder: const Text('請輸入用戶名'), leading: Padding( padding: const EdgeInsets.only(right: AppSpacing.sm), child: Icon(LucideIcons.user, size: 18, color: context.appColors.onSurfaceMuted), @@ -166,7 +166,7 @@ class _LoginPageState extends State { height: _inputHeight, child: ShadInputFormField( id: 'password', - placeholder: const Text('请输入密码'), + placeholder: const Text('請輸入密碼'), obscureText: _obscurePassword, leading: Padding( padding: const EdgeInsets.only(right: AppSpacing.sm), @@ -196,7 +196,7 @@ class _LoginPageState extends State { } Widget _buildLoginButton() { - // 设计稿: accent-primary = light:#1F2937 / dark:#D4AF37 + // 設計稿: accent-primary = light:#1F2937 / dark:#D4AF37 final buttonColor = context.appColors.accentPrimary; final textColor = context.colors.onPrimary; @@ -222,7 +222,7 @@ class _LoginPageState extends State { ), ) : Text( - '登录', + '登錄', style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, color: textColor, @@ -235,7 +235,7 @@ class _LoginPageState extends State { } // ============================================ - // 底部注册链接 + // 底部註冊鏈接 // ============================================ Widget _buildRegisterRow() { @@ -249,7 +249,7 @@ class _LoginPageState extends State { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - '还没有账户?', + '還沒有賬戶?', style: AppTextStyles.bodyLarge(context).copyWith( color: secondaryTextColor, ), @@ -258,7 +258,7 @@ class _LoginPageState extends State { GestureDetector( onTap: _navigateToRegister, child: Text( - '立即注册', + '立即註冊', style: AppTextStyles.bodyLarge(context).copyWith( fontWeight: FontWeight.w600, color: goldColor, @@ -276,20 +276,20 @@ class _LoginPageState extends State { String? _validateUsername(String? value) { if (value == null || value.isEmpty) { - return '请输入用户名'; + return '請輸入用戶名'; } if (value.length < 3) { - return '用户名至少 3 个字符'; + return '用戶名至少 3 個字符'; } return null; } String? _validatePassword(String? value) { if (value == null || value.isEmpty) { - return '请输入密码'; + return '請輸入密碼'; } if (value.length < 6) { - return '密码至少 6 个字符'; + return '密碼至少 6 個字符'; } return null; } @@ -312,7 +312,7 @@ class _LoginPageState extends State { if (response.success) { _navigateToMainPage(); } else { - _showErrorDialog(response.message ?? '用户名或密码错误'); + _showErrorDialog(response.message ?? '用戶名或密碼錯誤'); } } @@ -334,11 +334,11 @@ class _LoginPageState extends State { showShadDialog( context: context, builder: (context) => ShadDialog.alert( - title: const Text('登录失败'), + title: const Text('登錄失敗'), description: Text(message), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(context).pop(), ), ], diff --git a/flutter_monisuo/lib/ui/pages/auth/register_page.dart b/flutter_monisuo/lib/ui/pages/auth/register_page.dart index 55ed9fd..f55584b 100644 --- a/flutter_monisuo/lib/ui/pages/auth/register_page.dart +++ b/flutter_monisuo/lib/ui/pages/auth/register_page.dart @@ -11,7 +11,7 @@ import '../../components/glass_panel.dart'; import '../../components/neon_glow.dart'; import '../main/main_page.dart'; -/// 注册页面(两步注册:账号信息 + 身份证上传) +/// 註冊頁面(兩步註冊:賬號信息 + 身份證上傳) class RegisterPage extends StatefulWidget { const RegisterPage({super.key}); @@ -20,7 +20,7 @@ class RegisterPage extends StatefulWidget { } class _RegisterPageState extends State { - int _currentStep = 0; // 0: 账号信息, 1: 身份证上传 + int _currentStep = 0; // 0: 賬號信息, 1: 身份證上傳 // 第一步 final _usernameController = TextEditingController(); @@ -96,11 +96,11 @@ class _RegisterPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - // 步骤指示器 + // 步驟指示器 _buildStepIndicator(colorScheme), SizedBox(height: AppSpacing.xl), - // 内容区 + // 內容區 _currentStep == 0 ? _buildStep1(colorScheme) : _buildStep2(colorScheme), ], ), @@ -114,7 +114,7 @@ class _RegisterPageState extends State { children: [ _buildStepCircle( number: '1', - label: '账号信息', + label: '賬號信息', isActive: true, isComplete: _currentStep > 0, colorScheme: colorScheme, @@ -129,7 +129,7 @@ class _RegisterPageState extends State { ), _buildStepCircle( number: '2', - label: '身份验证', + label: '身份驗證', isActive: _currentStep >= 1, isComplete: false, colorScheme: colorScheme, @@ -191,17 +191,17 @@ class _RegisterPageState extends State { ); } - /// 第一步:账号信息 + /// 第一步:賬號信息 Widget _buildStep1(ColorScheme colorScheme) { return Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - // 标题 + // 標題 Center( child: Text( - '创建账号', + '創建賬號', style: AppTextStyles.displaySmall(context).copyWith( fontWeight: FontWeight.bold, color: colorScheme.onSurface, @@ -210,30 +210,30 @@ class _RegisterPageState extends State { ), SizedBox(height: AppSpacing.xxl), - // 用户名 + // 用戶名 TextFormField( controller: _usernameController, style: TextStyle(color: colorScheme.onSurface), decoration: InputDecoration( - hintText: '请输入账号(4-20位字母数字)', + hintText: '請輸入賬號(4-20位字母數字)', prefixIcon: Icon(Icons.person_outline, color: colorScheme.onSurfaceVariant), ), validator: (value) { - if (value == null || value.isEmpty) return '请输入账号'; - if (value.length < 4) return '账号至少4位'; - if (value.length > 20) return '账号最多20位'; + if (value == null || value.isEmpty) return '請輸入賬號'; + if (value.length < 4) return '賬號至少4位'; + if (value.length > 20) return '賬號最多20位'; return null; }, ), SizedBox(height: AppSpacing.md), - // 密码 + // 密碼 TextFormField( controller: _passwordController, obscureText: _obscurePassword, style: TextStyle(color: colorScheme.onSurface), decoration: InputDecoration( - hintText: '请输入密码(至少6位)', + hintText: '請輸入密碼(至少6位)', prefixIcon: Icon(Icons.lock_outline, color: colorScheme.onSurfaceVariant), suffixIcon: IconButton( icon: Icon( @@ -244,20 +244,20 @@ class _RegisterPageState extends State { ), ), validator: (value) { - if (value == null || value.isEmpty) return '请输入密码'; - if (value.length < 6) return '密码至少6位'; + if (value == null || value.isEmpty) return '請輸入密碼'; + if (value.length < 6) return '密碼至少6位'; return null; }, ), SizedBox(height: AppSpacing.md), - // 确认密码 + // 確認密碼 TextFormField( controller: _confirmPasswordController, obscureText: _obscureConfirmPassword, style: TextStyle(color: colorScheme.onSurface), decoration: InputDecoration( - hintText: '请再次输入密码', + hintText: '請再次輸入密碼', prefixIcon: Icon(Icons.lock_outline, color: colorScheme.onSurfaceVariant), suffixIcon: IconButton( icon: Icon( @@ -268,25 +268,25 @@ class _RegisterPageState extends State { ), ), validator: (value) { - if (value == null || value.isEmpty) return '请再次输入密码'; - if (value != _passwordController.text) return '两次密码不一致'; + if (value == null || value.isEmpty) return '請再次輸入密碼'; + if (value != _passwordController.text) return '兩次密碼不一致'; return null; }, ), SizedBox(height: AppSpacing.md), - // 推广码(可选) + // 推廣碼(可選) TextFormField( controller: _referralCodeController, style: TextStyle(color: colorScheme.onSurface), decoration: InputDecoration( - hintText: '推广码(选填)', + hintText: '推廣碼(選填)', prefixIcon: Icon(Icons.card_giftcard, color: colorScheme.onSurfaceVariant), ), ), SizedBox(height: AppSpacing.xl), - // 下一步按钮 + // 下一步按鈕 SizedBox( width: double.infinity, child: NeonButton( @@ -303,11 +303,11 @@ class _RegisterPageState extends State { ), SizedBox(height: AppSpacing.md), - // 登录链接 + // 登錄鏈接 Center( child: TextButton( onPressed: () => Navigator.pop(context), - child: Text('已有账号?立即登录', style: AppTextStyles.headlineMedium(context)), + child: Text('已有賬號?立即登錄', style: AppTextStyles.headlineMedium(context)), ), ), ], @@ -315,12 +315,12 @@ class _RegisterPageState extends State { ); } - /// 第二步:身份证上传 + /// 第二步:身份證上傳 Widget _buildStep2(ColorScheme colorScheme) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - // 标题区 + // 標題區 GlassPanel( padding: EdgeInsets.all(AppSpacing.lg), child: Column( @@ -345,7 +345,7 @@ class _RegisterPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '身份验证', + '身份驗證', style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, color: colorScheme.onSurface, @@ -353,7 +353,7 @@ class _RegisterPageState extends State { ), SizedBox(height: AppSpacing.xs), Text( - '上传身份证正反面完成注册', + '上傳身份證正反面完成註冊', style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, ), @@ -364,9 +364,9 @@ class _RegisterPageState extends State { ), SizedBox(height: AppSpacing.xl), - // 身份证正面 + // 身份證正面 Text( - '身份证正面(人像面)', + '身份證正面(人像面)', style: AppTextStyles.bodyLarge(context).copyWith( fontWeight: FontWeight.w600, color: colorScheme.onSurface, @@ -382,9 +382,9 @@ class _RegisterPageState extends State { ), SizedBox(height: AppSpacing.lg), - // 身份证反面 + // 身份證反面 Text( - '身份证反面(国徽面)', + '身份證反面(國徽面)', style: AppTextStyles.bodyLarge(context).copyWith( fontWeight: FontWeight.w600, color: colorScheme.onSurface, @@ -394,19 +394,19 @@ class _RegisterPageState extends State { _buildUploadZone( imageFile: _backFile, imageBytes: _backBytes, - label: '国徽面', + label: '國徽面', onTap: () => _pickImage(false), colorScheme: colorScheme, ), SizedBox(height: AppSpacing.xl), - // 注册按钮 + // 註冊按鈕 Consumer( builder: (context, auth, _) { return SizedBox( width: double.infinity, child: NeonButton( - text: _isLoading ? '注册中...' : '完成注册', + text: _isLoading ? '註冊中...' : '完成註冊', type: NeonButtonType.primary, onPressed: _canSubmit && !auth.isLoading ? _handleRegister : null, height: 48, @@ -434,7 +434,7 @@ class _RegisterPageState extends State { SizedBox(width: AppSpacing.sm), Expanded( child: Text( - '您的身份信息将被加密存储,仅用于身份验证', + '您的身份信息將被加密存儲,僅用於身份驗證', style: AppTextStyles.bodySmall(context).copyWith( color: AppColorScheme.up.withValues(alpha: 0.8), ), @@ -502,7 +502,7 @@ class _RegisterPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '$label已选择', + '$label已選擇', style: AppTextStyles.bodyMedium(context).copyWith( fontWeight: FontWeight.w600, color: AppColorScheme.darkOnPrimary, @@ -551,7 +551,7 @@ class _RegisterPageState extends State { ), SizedBox(height: AppSpacing.sm), Text( - '点击上传$label', + '點擊上傳$label', style: AppTextStyles.bodyLarge(context).copyWith( color: colorScheme.onSurfaceVariant.withValues(alpha: 0.6), ), @@ -597,11 +597,11 @@ class _RegisterPageState extends State { showShadDialog( context: context, builder: (ctx) => ShadDialog.alert( - title: const Text('注册失败'), - description: Text(response.message ?? '请稍后重试'), + title: const Text('註冊失敗'), + description: Text(response.message ?? '請稍後重試'), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(ctx).pop(), ), ], @@ -613,11 +613,11 @@ class _RegisterPageState extends State { showShadDialog( context: context, builder: (ctx) => ShadDialog.alert( - title: const Text('注册失败'), + title: const Text('註冊失敗'), description: Text(e.toString()), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(ctx).pop(), ), ], @@ -630,7 +630,7 @@ class _RegisterPageState extends State { } } -/// 虚线边框画笔 +/// 虛線邊框畫筆 class _DashedBorderPainter extends CustomPainter { final Color color; final double borderRadius; diff --git a/flutter_monisuo/lib/ui/pages/home/bills_page.dart b/flutter_monisuo/lib/ui/pages/home/bills_page.dart index 0faa6eb..72ea23a 100644 --- a/flutter_monisuo/lib/ui/pages/home/bills_page.dart +++ b/flutter_monisuo/lib/ui/pages/home/bills_page.dart @@ -9,7 +9,7 @@ import '../../../data/models/account_models.dart'; import '../../../data/services/bonus_service.dart'; import '../../../providers/asset_provider.dart'; -/// 账单页面 — 代币盈亏账单 + 新人福利账单 + 推广福利账单 +/// 賬單頁面 — 代幣盈虧賬單 + 新人福利賬單 + 推廣福利賬單 class BillsPage extends StatefulWidget { const BillsPage({super.key}); @@ -42,7 +42,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix final provider = context.read(); final bonusService = context.read(); - // 并行加载持仓和福利记录 + // 並行加載持倉和福利記錄 await provider.loadTradeAccount(force: true); final welfareResponse = await bonusService.getWelfareStatus(); @@ -73,7 +73,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix if (newUser != null) { final claimed = newUser['claimed'] as bool? ?? false; final eligible = newUser['eligible'] as bool? ?? false; - // 状态: 1=已领取, 0=可领取(待领取), 2=不可用(未解锁) + // 狀態: 1=已領取, 0=可領取(待領取), 2=不可用(未解鎖) final int status; if (claimed) { status = 1; @@ -91,15 +91,15 @@ class _BillsPageState extends State with SingleTickerProviderStateMix }); } - // 推广福利列表 + // 推廣福利列表 final referralRewards = data['referralRewards'] as List? ?? []; for (var r in referralRewards) { final map = r as Map; - final username = map['username'] as String? ?? '用户'; + final username = map['username'] as String? ?? '用戶'; final milestones = map['milestones'] as List? ?? []; final claimableCount = map['claimableCount'] as int? ?? 0; - // 每个 milestone 生成一条记录 + // 每個 milestone 生成一條記錄 for (var m in milestones) { final ms = m as Map; final earned = ms['earned'] as bool? ?? false; @@ -108,26 +108,26 @@ class _BillsPageState extends State with SingleTickerProviderStateMix final int status; if (earned) { - status = 1; // 已领取 + status = 1; // 已領取 } else if (claimable) { - status = 0; // 可领取 + status = 0; // 可領取 } else { - status = 2; // 未达标 + status = 2; // 未達標 } records.add({ 'type': 'referral', - 'title': '推广福利 - $username (${milestoneVal}000)', + 'title': '推廣福利 - $username (${milestoneVal}000)', 'amount': '100.00', 'status': status, 'time': ms['claimTime'] ?? ms['createTime'], }); } - // 如果没有 milestone 但有 claimableCount,也生成记录 + // 如果沒有 milestone 但有 claimableCount,也生成記錄 if (milestones.isEmpty && claimableCount > 0) { records.add({ 'type': 'referral', - 'title': '推广福利 - $username', + 'title': '推廣福利 - $username', 'amount': '${claimableCount * 100}', 'status': 0, 'time': null, @@ -150,7 +150,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix icon: const Icon(LucideIcons.arrowLeft, size: 20), onPressed: () => Navigator.of(context).pop(), ), - title: Text('我的账单', style: AppTextStyles.headlineLarge(context)), + title: Text('我的賬單', style: AppTextStyles.headlineLarge(context)), backgroundColor: _isDark ? AppColorScheme.darkBackground : AppColorScheme.lightBackground, elevation: 0, scrolledUnderElevation: 0, @@ -163,9 +163,9 @@ class _BillsPageState extends State with SingleTickerProviderStateMix labelStyle: AppTextStyles.headlineMedium(context).copyWith(fontWeight: FontWeight.w600), unselectedLabelStyle: AppTextStyles.headlineMedium(context), tabs: const [ - Tab(text: '代币盈亏'), + Tab(text: '代幣盈虧'), Tab(text: '新人福利'), - Tab(text: '推广福利'), + Tab(text: '推廣福利'), ], ), ), @@ -183,16 +183,16 @@ class _BillsPageState extends State with SingleTickerProviderStateMix } // ============================================ - // 代币盈亏账单 + // 代幣盈虧賬單 // ============================================ Widget _buildCoinProfitTab() { final colorScheme = Theme.of(context).colorScheme; if (_holdings.isEmpty) { - return _buildEmptyState(LucideIcons.wallet, '暂无持仓记录'); + return _buildEmptyState(LucideIcons.wallet, '暫無持倉記錄'); } - // 汇总统计 + // 彙總統計 double totalCost = 0; double totalValue = 0; double totalProfit = 0; @@ -210,7 +210,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix child: ListView( padding: const EdgeInsets.all(AppSpacing.md), children: [ - // 汇总卡片 + // 彙總卡片 Container( padding: const EdgeInsets.all(AppSpacing.lg), decoration: BoxDecoration( @@ -224,7 +224,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix ), child: Column( children: [ - Text('总盈亏 (USDT)', style: AppTextStyles.bodyMedium(context).copyWith( + Text('總盈虧 (USDT)', style: AppTextStyles.bodyMedium(context).copyWith( color: colorScheme.onSurfaceVariant, )), const SizedBox(height: AppSpacing.xs), @@ -239,9 +239,9 @@ class _BillsPageState extends State with SingleTickerProviderStateMix Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - _buildSummaryItem('总成本', totalCost.toStringAsFixed(2)), + _buildSummaryItem('總成本', totalCost.toStringAsFixed(2)), Container(width: 1, height: 16, color: colorScheme.outlineVariant.withValues(alpha: 0.3)), - _buildSummaryItem('总市值', totalValue.toStringAsFixed(2)), + _buildSummaryItem('總市值', totalValue.toStringAsFixed(2)), Container(width: 1, height: 16, color: colorScheme.outlineVariant.withValues(alpha: 0.3)), _buildSummaryItem('收益率', '${profitRate >= 0 ? '+' : ''}${profitRate.toStringAsFixed(2)}%'), ], @@ -251,7 +251,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix ), const SizedBox(height: AppSpacing.md), - // 各币种盈亏明细 + // 各幣種盈虧明細 ..._holdings.map((h) => _buildCoinProfitCard(h)), ], ), @@ -296,7 +296,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix ), child: Column( children: [ - // 币名 + 盈亏金额 + // 幣名 + 盈虧金額 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -333,11 +333,11 @@ class _BillsPageState extends State with SingleTickerProviderStateMix ], ), const SizedBox(height: AppSpacing.sm), - // 明细行 + // 明細行 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('均价: ${h.avgPrice}', style: AppTextStyles.bodySmall(context).copyWith( + Text('均價: ${h.avgPrice}', style: AppTextStyles.bodySmall(context).copyWith( color: colorScheme.onSurfaceVariant, )), Text('市值: ${h.currentValue} USDT', style: AppTextStyles.bodySmall(context).copyWith( @@ -355,7 +355,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix } // ============================================ - // 福利账单 + // 福利賬單 // ============================================ Widget _buildWelfareTab(String type) { final records = _welfareRecords.where((r) => r['type'] == type).toList(); @@ -363,7 +363,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix if (records.isEmpty) { return _buildEmptyState( LucideIcons.gift, - type == 'new_user' ? '暂无新人福利记录' : '暂无推广福利记录', + type == 'new_user' ? '暫無新人福利記錄' : '暫無推廣福利記錄', ); } @@ -382,20 +382,20 @@ class _BillsPageState extends State with SingleTickerProviderStateMix final amount = double.tryParse(record['amount']?.toString() ?? '0') ?? 0; final status = record['status'] as int? ?? 0; - // status: 0=待领取, 1=已领取, 2=未达标 + // status: 0=待領取, 1=已領取, 2=未達標 String statusText; Color statusColor; switch (status) { case 1: - statusText = '已领取'; + statusText = '已領取'; statusColor = context.appColors.up; break; case 2: - statusText = '未达标'; + statusText = '未達標'; statusColor = colorScheme.onSurfaceVariant; break; default: - statusText = '待领取'; + statusText = '待領取'; statusColor = AppColorScheme.warning; } @@ -463,7 +463,7 @@ class _BillsPageState extends State with SingleTickerProviderStateMix } // ============================================ - // 通用组件 + // 通用組件 // ============================================ Widget _buildEmptyState(IconData icon, String text) { final colorScheme = Theme.of(context).colorScheme; diff --git a/flutter_monisuo/lib/ui/pages/home/header_bar.dart b/flutter_monisuo/lib/ui/pages/home/header_bar.dart index 5138895..adf5b33 100644 --- a/flutter_monisuo/lib/ui/pages/home/header_bar.dart +++ b/flutter_monisuo/lib/ui/pages/home/header_bar.dart @@ -6,7 +6,7 @@ import '../../../core/theme/app_color_scheme.dart'; import '../../../core/theme/app_spacing.dart'; import '../../../providers/auth_provider.dart'; -/// 首页顶栏 - Logo + 搜索/通知/头像 +/// 首頁頂欄 - Logo + 搜索/通知/頭像 class HeaderBar extends StatelessWidget { const HeaderBar({super.key}); diff --git a/flutter_monisuo/lib/ui/pages/home/home_page.dart b/flutter_monisuo/lib/ui/pages/home/home_page.dart index 0d0e02a..85eb4cd 100644 --- a/flutter_monisuo/lib/ui/pages/home/home_page.dart +++ b/flutter_monisuo/lib/ui/pages/home/home_page.dart @@ -20,7 +20,7 @@ import 'hot_coins_section.dart'; import 'profit_analysis_page.dart'; import 'bills_page.dart'; -/// 首页 +/// 首頁 class HomePage extends StatefulWidget { const HomePage({super.key}); @@ -105,13 +105,13 @@ class _HomePageState extends State // Header HeaderBar(), SizedBox(height: AppSpacing.md), - // 资产卡片(含预估盈亏) + // 資產卡片(含預估盈虧) _AssetCard( overview: provider.overview, onDeposit: _showDeposit, ), SizedBox(height: AppSpacing.md), - // 快捷操作栏 + // 快捷操作欄 QuickActionsRow( onDeposit: _showDeposit, onWithdraw: _showWithdraw, @@ -129,10 +129,10 @@ class _HomePageState extends State ), ), SizedBox(height: AppSpacing.lg), - // 热门币种 + // 熱門幣種 HotCoinsSection(), SizedBox(height: AppSpacing.lg), - // 持仓 + // 持倉 _HoldingsSection(holdings: provider.holdings), ], ), @@ -174,7 +174,7 @@ class _HomePageState extends State } } -/// 资产卡片(含预估盈亏) +/// 資產卡片(含預估盈虧) class _AssetCard extends StatefulWidget { final AssetOverview? overview; final VoidCallback onDeposit; @@ -197,7 +197,7 @@ class _AssetCardState extends State<_AssetCard> { @override void didUpdateWidget(covariant _AssetCard oldWidget) { super.didUpdateWidget(oldWidget); - // overview 更新时重新加载盈亏数据 + // overview 更新時重新加載盈虧數據 if (widget.overview != oldWidget.overview) { _loadProfit(); } @@ -239,7 +239,7 @@ class _AssetCardState extends State<_AssetCard> { final upColor = context.appColors.up; final downColor = context.appColors.down; - // 总资产 + // 總資產 final totalAsset = widget.overview?.totalAsset ?? '0.00'; final displayAsset = _formatAsset(totalAsset); @@ -249,12 +249,12 @@ class _AssetCardState extends State<_AssetCard> { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 顶部行:总资产标签 + 充值按钮 + // 頂部行:總資產標籤 + 充值按鈕 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '预估总资产(USDT)', + '預估總資產(USDT)', style: AppTextStyles.bodyLarge(context), ), GestureDetector( @@ -284,7 +284,7 @@ class _AssetCardState extends State<_AssetCard> { ), SizedBox(height: AppSpacing.sm), - // 总资产金额 + // 總資產金額 Text( displayAsset, style: AppTextStyles.displayLarge(context).copyWith( @@ -293,13 +293,13 @@ class _AssetCardState extends State<_AssetCard> { ), SizedBox(height: AppSpacing.md), - // 盈亏统计区:预估今日盈亏 | 预估总盈亏 + // 盈虧統計區:預估今日盈虧 | 預估總盈虧 Row( children: [ - // 预估今日盈亏 + // 預估今日盈虧 Expanded( child: _ProfitStatCard( - label: '预估今日盈亏', + label: '預估今日盈虧', value: _todayProfit, upColor: upColor, downColor: downColor, @@ -310,10 +310,10 @@ class _AssetCardState extends State<_AssetCard> { ), ), SizedBox(width: AppSpacing.sm), - // 预估总盈亏 + // 預估總盈虧 Expanded( child: _ProfitStatCard( - label: '预估总盈亏', + label: '預估總盈虧', value: _totalProfit, upColor: upColor, downColor: downColor, @@ -357,7 +357,7 @@ class _WelfareCard extends StatelessWidget { ), child: Row( children: [ - // 左侧图标 + // 左側圖標 Container( width: 48, height: 48, @@ -372,7 +372,7 @@ class _WelfareCard extends StatelessWidget { ), ), SizedBox(width: AppSpacing.md), - // 中间文字 + // 中間文字 Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -386,14 +386,14 @@ class _WelfareCard extends StatelessWidget { SizedBox(height: AppSpacing.xs), Text( totalClaimable > 0 - ? '您有 $totalClaimable 个奖励待领取' - : '首充奖励 + 推广奖励', + ? '您有 $totalClaimable 個獎勵待領取' + : '首充獎勵 + 推廣獎勵', style: AppTextStyles.bodyMedium(context), ), ], ), ), - // 右侧按钮 + // 右側按鈕 Container( padding: EdgeInsets.symmetric( horizontal: AppSpacing.md, @@ -440,7 +440,7 @@ class _WelfareCard extends StatelessWidget { } } -/// 持仓部分 +/// 持倉部分 class _HoldingsSection extends StatelessWidget { final List holdings; @@ -454,7 +454,7 @@ class _HoldingsSection extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '我的持仓', + '我的持倉', style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.bold, ), @@ -467,7 +467,7 @@ class _HoldingsSection extends StatelessWidget { ), child: Row( children: [ - Text('资产详情', + Text('資產詳情', style: AppTextStyles.headlineSmall(context).copyWith( fontWeight: FontWeight.bold, )), @@ -486,7 +486,7 @@ class _HoldingsSection extends StatelessWidget { } } -/// 空持仓 +/// 空持倉 class _EmptyHoldings extends StatelessWidget { const _EmptyHoldings(); @@ -505,7 +505,7 @@ class _EmptyHoldings extends StatelessWidget { Icon(LucideIcons.wallet, size: 48, color: context.colors.onSurfaceVariant), SizedBox(height: AppSpacing.md), Text( - '暂无持仓', + '暫無持倉', style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.w600, ), @@ -521,7 +521,7 @@ class _EmptyHoldings extends StatelessWidget { } } -/// 持仓列表 +/// 持倉列表 class _HoldingsList extends StatelessWidget { final List holdings; @@ -554,7 +554,7 @@ class _HoldingsList extends StatelessWidget { } } -/// 持仓项 +/// 持倉項 class _HoldingItem extends StatelessWidget { final AccountTrade holding; @@ -615,7 +615,7 @@ class _HoldingItem extends StatelessWidget { } } -/// 盈亏统计小卡片 +/// 盈虧統計小卡片 class _ProfitStatCard extends StatelessWidget { final String label; final double value; diff --git a/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart b/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart index ea7c579..b5d7f72 100644 --- a/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart +++ b/flutter_monisuo/lib/ui/pages/home/hot_coins_section.dart @@ -4,7 +4,7 @@ import '../../../core/theme/app_theme.dart'; import '../../../core/theme/app_spacing.dart'; import '../../../core/theme/app_theme_extension.dart'; -/// 首页热门币种区块 +/// 首頁熱門幣種區塊 class HotCoinsSection extends StatelessWidget { const HotCoinsSection({super.key}); @@ -19,7 +19,7 @@ class HotCoinsSection extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '热门币种', + '熱門幣種', style: AppTextStyles.headlineLarge(context), ), Text( diff --git a/flutter_monisuo/lib/ui/pages/home/profit_analysis_page.dart b/flutter_monisuo/lib/ui/pages/home/profit_analysis_page.dart index 4721743..ecac65c 100644 --- a/flutter_monisuo/lib/ui/pages/home/profit_analysis_page.dart +++ b/flutter_monisuo/lib/ui/pages/home/profit_analysis_page.dart @@ -6,7 +6,7 @@ import '../../../core/theme/app_spacing.dart'; import '../../../core/theme/app_theme_extension.dart'; import '../../../data/services/asset_service.dart'; -/// 盈亏分析页面 - 月度盈亏日历 +/// 盈虧分析頁面 - 月度盈虧日曆 class ProfitAnalysisPage extends StatefulWidget { const ProfitAnalysisPage({super.key}); @@ -27,7 +27,7 @@ class _ProfitAnalysisPageState extends State { } // ============================================ - // 数据加载 + // 數據加載 // ============================================ Future _loadProfit() async { @@ -64,7 +64,7 @@ class _ProfitAnalysisPageState extends State { } // ============================================ - // 盈亏数据解析 + // 盈虧數據解析 // ============================================ double? _getDayProfit(int day) { @@ -86,7 +86,7 @@ class _ProfitAnalysisPageState extends State { } // ============================================ - // 构建 UI + // 構建 UI // ============================================ @override @@ -98,7 +98,7 @@ class _ProfitAnalysisPageState extends State { return Scaffold( backgroundColor: context.colors.surface, appBar: AppBar( - title: const Text('盈亏分析'), + title: const Text('盈虧分析'), backgroundColor: context.colors.surface, elevation: 0, scrolledUnderElevation: 0, @@ -116,19 +116,19 @@ class _ProfitAnalysisPageState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - // 月度盈亏摘要 + // 月度盈虧摘要 _buildSummarySection(), SizedBox(height: AppSpacing.md), - // 月份导航 + // 月份導航 _buildMonthNavigation(isCurrentMonth), SizedBox(height: AppSpacing.sm), - // 星期标题 + // 星期標題 _buildWeekdayHeaders(), SizedBox(height: AppSpacing.xs), - // 日历网格 + // 日曆網格 if (_isLoading) _buildLoadingIndicator() else @@ -143,7 +143,7 @@ class _ProfitAnalysisPageState extends State { ); } - /// 月度盈亏摘要 + /// 月度盈虧摘要 Widget _buildSummarySection() { final upColor = context.appColors.up; final downColor = context.appColors.down; @@ -153,7 +153,7 @@ class _ProfitAnalysisPageState extends State { return Column( children: [ Text( - '月度盈亏', + '月度盈虧', style: AppTextStyles.bodyMedium(context).copyWith( color: context.colors.onSurfaceVariant, ), @@ -172,7 +172,7 @@ class _ProfitAnalysisPageState extends State { ); } - /// 月份导航行 + /// 月份導航行 Widget _buildMonthNavigation(bool isCurrentMonth) { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -193,14 +193,14 @@ class _ProfitAnalysisPageState extends State { ), ), ), - // 当前年月 + // 當前年月 Text( '${_currentMonth.year}年${_currentMonth.month}月', style: AppTextStyles.headlineMedium(context).copyWith( fontWeight: FontWeight.bold, ), ), - // 下一月(当前月禁用) + // 下一月(當前月禁用) GestureDetector( onTap: isCurrentMonth ? null : _nextMonth, child: Container( @@ -224,7 +224,7 @@ class _ProfitAnalysisPageState extends State { ); } - /// 星期标题行 + /// 星期標題行 Widget _buildWeekdayHeaders() { return Row( children: ['一', '二', '三', '四', '五', '六', '日'].map((d) { @@ -243,7 +243,7 @@ class _ProfitAnalysisPageState extends State { ); } - /// 加载指示器 + /// 加載指示器 Widget _buildLoadingIndicator() { return Padding( padding: EdgeInsets.symmetric(vertical: AppSpacing.xxl), @@ -260,7 +260,7 @@ class _ProfitAnalysisPageState extends State { ); } - /// 日历网格 + /// 日曆網格 List _buildCalendarGrid( DateTime now, bool isCurrentMonth, diff --git a/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart b/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart index 2b02d1c..7763798 100644 --- a/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart +++ b/flutter_monisuo/lib/ui/pages/home/quick_actions_row.dart @@ -3,7 +3,7 @@ import 'package:shadcn_ui/shadcn_ui.dart'; import '../../../core/theme/app_theme.dart'; import '../../../core/theme/app_spacing.dart'; -/// 首页快捷操作栏 - 充值/提现/划转/盈亏/账单 +/// 首頁快捷操作欄 - 充值/提現/劃轉/盈虧/賬單 class QuickActionsRow extends StatelessWidget { const QuickActionsRow({ super.key, @@ -56,25 +56,25 @@ class QuickActionsRow extends StatelessWidget { ), _ActionItem( icon: LucideIcons.arrowDownLeft, - label: '提现', + label: '提現', colorScheme: colorScheme, onTap: onWithdraw, ), _ActionItem( icon: LucideIcons.repeat, - label: '划转', + label: '劃轉', colorScheme: colorScheme, onTap: onTransfer, ), _ActionItem( icon: LucideIcons.chartPie, - label: '盈亏', + label: '盈虧', colorScheme: colorScheme, onTap: onProfit, ), _ActionItem( icon: LucideIcons.fileText, - label: '账单', + label: '賬單', colorScheme: colorScheme, onTap: onBills, ), @@ -105,7 +105,7 @@ class _ActionItem extends StatelessWidget { ? const Color(0xFF1E293B) : const Color(0xFFF3F4F6); - // Light: #4B5563, Dark: 根据主题 + // Light: #4B5563, Dark: 根據主題 final iconColor = isDark ? colorScheme.onSurfaceVariant : const Color(0xFF4B5563); diff --git a/flutter_monisuo/lib/ui/pages/main/main_page.dart b/flutter_monisuo/lib/ui/pages/main/main_page.dart index f7c4c03..5f5d242 100644 --- a/flutter_monisuo/lib/ui/pages/main/main_page.dart +++ b/flutter_monisuo/lib/ui/pages/main/main_page.dart @@ -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 { int _currentIndex = 0; final Set _loadedPages = {0}; - String? _tradeCoinCode; // 交易页面选中的币种代码 + String? _tradeCoinCode; // 交易頁面選中的幣種代碼 late final List _pages; - // 防抖:记录上次刷新时间,同一 Tab 500ms 内不重复刷新 + // 防抖:記錄上次刷新時間,同一 Tab 500ms 內不重複刷新 final Map _lastRefreshTime = {}; @override @@ -55,13 +55,13 @@ class MainPageState extends State { _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 { _lastRefreshTime[index] = now; switch (index) { - case 0: // 首页 - 刷新资产概览 + case 0: // 首頁 - 刷新資產概覽 context.read().loadOverview(force: true); break; - case 1: // 行情 - 刷新币种列表 + case 1: // 行情 - 刷新幣種列表 context.read().loadCoins(force: true); break; - case 3: // 资产 - 刷新全部资产 + case 3: // 資產 - 刷新全部資產 context.read().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 { } 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 { } } -/// 底部导航栏 - 专业信任主题 +/// 底部導航欄 - 專業信任主題 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 loadedIndexes; diff --git a/flutter_monisuo/lib/ui/pages/market/market_page.dart b/flutter_monisuo/lib/ui/pages/market/market_page.dart index 52e03e3..aba0119 100644 --- a/flutter_monisuo/lib/ui/pages/market/market_page.dart +++ b/flutter_monisuo/lib/ui/pages/market/market_page.dart @@ -10,7 +10,7 @@ import '../../../providers/market_provider.dart'; import '../../components/glass_panel.dart'; import '../main/main_page.dart'; -/// 行情页面 +/// 行情頁面 class MarketPage extends StatefulWidget { const MarketPage({super.key}); @@ -62,7 +62,7 @@ class _MarketPageState extends State child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 页面标题 "行情" + // 頁面標題 "行情" Padding( padding: const EdgeInsets.only(bottom: AppSpacing.sm), child: Text( @@ -71,13 +71,13 @@ class _MarketPageState extends State ), ), const SizedBox(height: AppSpacing.md), - // 精选区域:BTC + ETH 卡片 + // 精選區域:BTC + ETH 卡片 _buildFeaturedSection(provider), const SizedBox(height: AppSpacing.md), - // 分区标题:全部币种 + 更多 + // 分區標題:全部幣種 + 更多 _buildSectionHeader(), const SizedBox(height: AppSpacing.md), - // 币种列表卡片 + // 幣種列表卡片 _buildCoinList(provider), ], ), @@ -88,7 +88,7 @@ class _MarketPageState extends State ); } - /// 精选区域:BTC + ETH 大卡片 + /// 精選區域:BTC + ETH 大卡片 Widget _buildFeaturedSection(MarketProvider provider) { final featured = provider.featuredCoins; if (featured.isEmpty) return const SizedBox.shrink(); @@ -111,13 +111,13 @@ class _MarketPageState extends State ); } - /// 分区标题:全部币种 + 更多 + /// 分區標題:全部幣種 + 更多 Widget _buildSectionHeader() { return Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '全部币种', + '全部幣種', style: AppTextStyles.headlineLarge(context), ), Text( @@ -130,14 +130,14 @@ class _MarketPageState extends State ); } - /// 币种列表 + /// 幣種列表 Widget _buildCoinList(MarketProvider provider) { final coins = provider.otherCoins; if (coins.isEmpty) { return _EmptyState( icon: LucideIcons.coins, - message: '暂无数据', + message: '暫無數據', onRetry: () => provider.refresh(), ); } @@ -167,7 +167,7 @@ class _MarketPageState extends State ); } - /// 错误状态 + /// 錯誤狀態 Widget _buildErrorState(MarketProvider provider) { return Center( child: Padding( @@ -178,14 +178,14 @@ class _MarketPageState extends State Icon(LucideIcons.circleAlert, size: 48, color: context.colors.error), const SizedBox(height: AppSpacing.md), Text( - provider.error ?? '加载失败', + provider.error ?? '加載失敗', style: TextStyle(color: context.colors.error), textAlign: TextAlign.center, ), const SizedBox(height: AppSpacing.md), ShadButton( onPressed: () => provider.refresh(), - child: const Text('重试'), + child: const Text('重試'), ), ], ), @@ -194,7 +194,7 @@ class _MarketPageState extends State } } -/// 精选卡片:BTC / ETH (130px 高度,含迷你柱状图) +/// 精選卡片:BTC / ETH (130px 高度,含迷你柱狀圖) class _FeaturedCard extends StatelessWidget { final Coin coin; @@ -216,13 +216,13 @@ class _FeaturedCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - // 第一行:币种名称 + 涨跌徽章 + // 第一行:幣種名稱 + 漲跌徽章 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( '${coin.code}/USDT', - style: AppTextStyles.labelLarge(context), // 缩小文字 + style: AppTextStyles.labelLarge(context), // 縮小文字 ), Container( padding: const EdgeInsets.symmetric(horizontal: AppSpacing.xs + 2, vertical: 2), @@ -234,27 +234,27 @@ class _FeaturedCard extends StatelessWidget { coin.formattedChange, style: AppTextStyles.labelSmall(context).copyWith( color: changeColor, - fontSize: 10, // 缩小文字 + fontSize: 10, // 縮小文字 ), ), ), ], ), - // 第二行:价格 + // 第二行:價格 Text( '\$${_formatFeaturedPrice(coin)}', - style: AppTextStyles.headlineLarge(context).copyWith( // 缩小文字 + style: AppTextStyles.headlineLarge(context).copyWith( // 縮小文字 fontWeight: FontWeight.bold, ), ), - // 第三行:币种全名 + // 第三行:幣種全名 Text( coin.name, - style: AppTextStyles.bodySmall(context).copyWith( // 缩小文字 + style: AppTextStyles.bodySmall(context).copyWith( // 縮小文字 color: context.colors.onSurfaceVariant, ), ), - // 第四行:迷你柱状图 + // 第四行:迷你柱狀圖 Expanded( child: _MiniBarChart(isUp: isUp, seed: coin.code.hashCode), ), @@ -263,7 +263,7 @@ class _FeaturedCard extends StatelessWidget { ); } - /// 精选卡片使用简短价格格式(带逗号) + /// 精選卡片使用簡短價格格式(帶逗號) String _formatFeaturedPrice(Coin coin) { if (coin.price >= 1000) { return _addCommas(coin.price.toStringAsFixed(2)); @@ -288,7 +288,7 @@ class _FeaturedCard extends StatelessWidget { } } -/// 迷你柱状图(模拟价格走势) +/// 迷你柱狀圖(模擬價格走勢) class _MiniBarChart extends StatelessWidget { final bool isUp; final int seed; @@ -301,7 +301,7 @@ class _MiniBarChart extends StatelessWidget { ? context.appColors.up : context.appColors.down; - // 生成随机但确定的高度序列 + // 生成隨機但確定的高度序列 final heights = _generateHeights(); return Row( @@ -310,7 +310,7 @@ class _MiniBarChart extends StatelessWidget { children: heights.map((h) { return Expanded( child: Padding( - padding: const EdgeInsets.only(left: 2), // 增加间距 + padding: const EdgeInsets.only(left: 2), // 增加間距 child: Container( height: h, decoration: BoxDecoration( @@ -326,13 +326,13 @@ class _MiniBarChart extends StatelessWidget { List _generateHeights() { final random = Random(seed); - final base = 6.0; // 降低基础高度 - final range = 12.0; // 降低范围 + final base = 6.0; // 降低基礎高度 + final range = 12.0; // 降低範圍 return List.generate(6, (_) => base + random.nextDouble() * range); } } -/// 币种列表行 +/// 幣種列表行 class _CoinRow extends StatelessWidget { final Coin coin; @@ -354,10 +354,10 @@ class _CoinRow extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: AppSpacing.md, vertical: 14), child: Row( children: [ - // 头像:圆形字母头像 + // 頭像:圓形字母頭像 _CoinAvatar(letter: coin.displayIcon, code: coin.code), const SizedBox(width: AppSpacing.sm + AppSpacing.xs), - // 币种信息:交易对 + 全名 + // 幣種信息:交易對 + 全名 Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -375,7 +375,7 @@ class _CoinRow extends StatelessWidget { ], ), ), - // 右侧:价格 + 涨跌标签 + // 右側:價格 + 漲跌標籤 Column( crossAxisAlignment: CrossAxisAlignment.end, mainAxisSize: MainAxisSize.min, @@ -412,7 +412,7 @@ class _CoinRow extends StatelessWidget { } } -/// 币种头像组件 +/// 幣種頭像組件 class _CoinAvatar extends StatelessWidget { final String letter; final String code; @@ -421,7 +421,7 @@ class _CoinAvatar extends StatelessWidget { @override Widget build(BuildContext context) { - // 使用主题变量而非硬编码 + // 使用主題變量而非硬編碼 final bgColor = context.colors.primary.withValues(alpha: context.appColors.glowOpacity); return Container( @@ -456,7 +456,7 @@ class _CoinAvatar extends StatelessWidget { } } -/// 空状态 +/// 空狀態 class _EmptyState extends StatelessWidget { final IconData icon; final String message; @@ -481,7 +481,7 @@ class _EmptyState extends StatelessWidget { const SizedBox(height: AppSpacing.md), ShadButton( onPressed: onRetry, - child: const Text('重试'), + child: const Text('重試'), ), ], ], diff --git a/flutter_monisuo/lib/ui/pages/mine/components/about_dialog_helpers.dart b/flutter_monisuo/lib/ui/pages/mine/components/about_dialog_helpers.dart index e86ec54..cee1b14 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/about_dialog_helpers.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/about_dialog_helpers.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; -/// 信息行组件(用于关于对话框) +/// 信息行組件(用於關於對話框) class InfoRow extends StatelessWidget { final IconData icon; final String text; diff --git a/flutter_monisuo/lib/ui/pages/mine/components/avatar_circle.dart b/flutter_monisuo/lib/ui/pages/mine/components/avatar_circle.dart index 715dda4..ec1d747 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/avatar_circle.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/avatar_circle.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; -/// 圆形头像组件 +/// 圓形頭像組件 /// -/// 显示用户首字母或默认比特币符号。通过 [radius] 控制大小, -/// [fontSize] 控制文字大小,[text] 可传入用户头像文字。 +/// 顯示用戶首字母或默認比特幣符號。通過 [radius] 控制大小, +/// [fontSize] 控制文字大小,[text] 可傳入用戶頭像文字。 class AvatarCircle extends StatelessWidget { final double radius; final double fontSize; diff --git a/flutter_monisuo/lib/ui/pages/mine/components/logout_button.dart b/flutter_monisuo/lib/ui/pages/mine/components/logout_button.dart index 1ba0560..893ee15 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/logout_button.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/logout_button.dart @@ -3,7 +3,7 @@ import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; -/// 退出登录按钮 +/// 退出登錄按鈕 class LogoutButton extends StatelessWidget { final VoidCallback onLogout; const LogoutButton({super.key, required this.onLogout}); @@ -24,7 +24,7 @@ class LogoutButton extends StatelessWidget { ), child: Center( child: Text( - '退出登录', + '退出登錄', style: AppTextStyles.headlineMedium(context).copyWith( color: AppColorScheme.down, ), diff --git a/flutter_monisuo/lib/ui/pages/mine/components/menu_group1.dart b/flutter_monisuo/lib/ui/pages/mine/components/menu_group1.dart index f67a919..3226e22 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/menu_group1.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/menu_group1.dart @@ -10,7 +10,7 @@ import 'menu_group_container.dart'; import 'menu_row.dart'; import 'menu_trailing_widgets.dart'; -/// 菜单分组1 - 福利中心 / 实名认证 / 安全设置 / 消息通知 +/// 菜單分組1 - 福利中心 / 實名認證 / 安全設置 / 消息通知 class MenuGroup1 extends StatelessWidget { final int kycStatus; final void Function(String) onShowComingSoon; @@ -39,11 +39,11 @@ class MenuGroup1 extends StatelessWidget { }, ), const Divider(height: 1), - // 实名认证 + // 實名認證 MenuRow( icon: LucideIcons.shieldCheck, iconColor: context.appColors.up, - title: '实名认证', + title: '實名認證', trailing: KycBadge(kycStatus: kycStatus), onTap: () { if (kycStatus == 2) { @@ -57,12 +57,12 @@ class MenuGroup1 extends StatelessWidget { }, ), const Divider(height: 1), - // 安全设置 + // 安全設置 MenuRow( icon: LucideIcons.lock, iconColor: context.colors.onSurfaceVariant, - title: '安全设置', - onTap: () => onShowComingSoon('安全设置'), + title: '安全設置', + onTap: () => onShowComingSoon('安全設置'), ), const Divider(height: 1), // 消息通知 @@ -79,7 +79,7 @@ class MenuGroup1 extends StatelessWidget { } } -/// 显示 KYC 认证状态对话框 +/// 顯示 KYC 認證狀態對話框 void showKycStatusDialog(BuildContext context) { showShadDialog( context: context, @@ -88,13 +88,13 @@ void showKycStatusDialog(BuildContext context) { children: [ Icon(Icons.check_circle, color: AppColorScheme.up, size: 20), SizedBox(width: AppSpacing.sm), - const Text('实名认证'), + const Text('實名認證'), ], ), - description: const Text('您的实名认证已通过'), + description: const Text('您的實名認證已通過'), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(ctx).pop(), ), ], diff --git a/flutter_monisuo/lib/ui/pages/mine/components/menu_group2.dart b/flutter_monisuo/lib/ui/pages/mine/components/menu_group2.dart index b39ddbd..ec11b7d 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/menu_group2.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/menu_group2.dart @@ -4,7 +4,7 @@ import 'menu_group_container.dart'; import 'menu_row.dart'; import 'menu_trailing_widgets.dart'; -/// 菜单分组2 - 深色模式 / 系统设置 / 关于我们 +/// 菜單分組2 - 深色模式 / 系統設置 / 關於我們 class MenuGroup2 extends StatelessWidget { final VoidCallback onShowAbout; @@ -20,21 +20,21 @@ class MenuGroup2 extends StatelessWidget { // 深色模式 const DarkModeRow(), const Divider(height: 1), - // 系统设置 + // 系統設置 MenuRow( icon: LucideIcons.settings, iconColor: colorScheme.onSurfaceVariant, - title: '系统设置', + title: '系統設置', onTap: () { - // TODO: 系统设置 + // TODO: 系統設置 }, ), const Divider(height: 1), - // 关于我们 + // 關於我們 MenuRow( icon: LucideIcons.info, iconColor: colorScheme.onSurfaceVariant, - title: '关于我们', + title: '關於我們', onTap: onShowAbout, ), ], diff --git a/flutter_monisuo/lib/ui/pages/mine/components/menu_group_container.dart b/flutter_monisuo/lib/ui/pages/mine/components/menu_group_container.dart index 04644d5..714dadb 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/menu_group_container.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/menu_group_container.dart @@ -2,10 +2,10 @@ import 'package:flutter/material.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme_extension.dart'; -/// 菜单分组容器 - 统一的圆角卡片样式 +/// 菜單分組容器 - 統一的圓角卡片樣式 /// -/// 所有菜单分组共享相同的容器样式:背景色、圆角、边框。 -/// 通过 [child] 传入菜单项 Column。 +/// 所有菜單分組共享相同的容器樣式:背景色、圓角、邊框。 +/// 通過 [child] 傳入菜單項 Column。 class MenuGroupContainer extends StatelessWidget { final Widget child; diff --git a/flutter_monisuo/lib/ui/pages/mine/components/menu_row.dart b/flutter_monisuo/lib/ui/pages/mine/components/menu_row.dart index 9eff0e6..4b27240 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/menu_row.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/menu_row.dart @@ -4,9 +4,9 @@ import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_theme_extension.dart'; -/// 单行菜单项:图标 + 标题 + 尾部组件 (chevron) +/// 單行菜單項:圖標 + 標題 + 尾部組件 (chevron) /// -/// 图标颜色 (通常是使用主题色) +/// 圖標顏色 (通常是使用主題色) class MenuRow extends StatelessWidget { final IconData icon; final Color iconColor; diff --git a/flutter_monisuo/lib/ui/pages/mine/components/menu_trailing_widgets.dart b/flutter_monisuo/lib/ui/pages/mine/components/menu_trailing_widgets.dart index c979156..055ecb4 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/menu_trailing_widgets.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/menu_trailing_widgets.dart @@ -7,12 +7,12 @@ import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_theme_extension.dart'; import '../../../../providers/theme_provider.dart'; -/// KYC 状态徽章 (e.g. "已认证" green badge + chevron) +/// KYC 狀態徽章 (e.g. "已認證" green badge + chevron) /// -/// 根据 [kycStatus] 显示不同状态: -/// - 2: 已认证(绿色) -/// - 1: 审核中(橙色) -/// - 其他: 仅显示 chevron +/// 根據 [kycStatus] 顯示不同狀態: +/// - 2: 已認證(綠色) +/// - 1: 審核中(橙色) +/// - 其他: 僅顯示 chevron class KycBadge extends StatelessWidget { final int kycStatus; const KycBadge({super.key, required this.kycStatus}); @@ -32,7 +32,7 @@ class KycBadge extends StatelessWidget { borderRadius: BorderRadius.circular(AppRadius.sm), ), child: Text( - '已认证', + '已認證', style: AppTextStyles.labelMedium(context).copyWith( color: green, ), @@ -59,7 +59,7 @@ class KycBadge extends StatelessWidget { borderRadius: BorderRadius.circular(AppRadius.sm), ), child: Text( - '审核中', + '審核中', style: AppTextStyles.labelMedium(context).copyWith( color: AppColorScheme.warning, ), @@ -83,7 +83,7 @@ class KycBadge extends StatelessWidget { } } -/// 红点指示器 - 消息通知 + chevron +/// 紅點指示器 - 消息通知 + chevron class RedDotIndicator extends StatelessWidget { const RedDotIndicator({super.key}); @@ -111,7 +111,7 @@ class RedDotIndicator extends StatelessWidget { } } -/// 深色模式切换行 +/// 深色模式切換行 class DarkModeRow extends StatelessWidget { const DarkModeRow({super.key}); diff --git a/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart b/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart index 3b91dad..acd39a2 100644 --- a/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart +++ b/flutter_monisuo/lib/ui/pages/mine/components/profile_card.dart @@ -5,7 +5,7 @@ import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_theme_extension.dart'; import 'avatar_circle.dart'; -/// 用户资料卡片 - 头像 + 用户名 + 徽章 + chevron +/// 用戶資料卡片 - 頭像 + 用戶名 + 徽章 + chevron class ProfileCard extends StatelessWidget { final dynamic user; const ProfileCard({super.key, required this.user}); @@ -37,12 +37,12 @@ class ProfileCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - user?.username ?? '未登录', + user?.username ?? '未登錄', style: AppTextStyles.headlineLarge(context), ), const SizedBox(height: 4), Text( - '普通用户', + '普通用戶', style: AppTextStyles.bodyMedium(context).copyWith( fontWeight: FontWeight.normal, ), diff --git a/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart b/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart index 79a8383..aecadb3 100644 --- a/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart +++ b/flutter_monisuo/lib/ui/pages/mine/kyc_page.dart @@ -11,7 +11,7 @@ import '../../../providers/auth_provider.dart'; import '../../components/glass_panel.dart'; import '../../components/neon_glow.dart'; -/// KYC 实名认证页面 +/// KYC 實名認證頁面 class KycPage extends StatefulWidget { final bool returnToWithdraw; @@ -64,7 +64,7 @@ class _KycPageState extends State { backgroundColor: colorScheme.surface.withOpacity(0.0), elevation: 0, title: Text( - '实名认证', + '實名認證', style: AppTextStyles.headlineLarge(context), ), leading: IconButton( @@ -77,17 +77,17 @@ class _KycPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 步骤指示器 + // 步驟指示器 _buildStepIndicator(colorScheme), SizedBox(height: AppSpacing.xl), - // 主表单区 + // 主表單區 GlassPanel( padding: EdgeInsets.all(AppSpacing.lg), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 标题区 + // 標題區 Row( children: [ Container( @@ -107,12 +107,12 @@ class _KycPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '身份验证', + '身份驗證', style: AppTextStyles.headlineLarge(context), ), SizedBox(height: 2), Text( - '上传身份证正反面完成实名认证', + '上傳身份證正反面完成實名認證', style: AppTextStyles.bodyMedium(context), ), ], @@ -121,9 +121,9 @@ class _KycPageState extends State { ), SizedBox(height: AppSpacing.xl), - // 身份证正面上传区 + // 身份證正面上傳區 Text( - '身份证正面(人像面)', + '身份證正面(人像面)', style: AppTextStyles.headlineSmall(context), ), SizedBox(height: AppSpacing.sm), @@ -136,26 +136,26 @@ class _KycPageState extends State { ), SizedBox(height: AppSpacing.lg), - // 身份证反面上传区 + // 身份證反面上傳區 Text( - '身份证反面(国徽面)', + '身份證反面(國徽面)', style: AppTextStyles.headlineSmall(context), ), SizedBox(height: AppSpacing.sm), _buildUploadZone( imageFile: _backFile, imageBytes: _backBytes, - label: '国徽面', + label: '國徽面', onTap: () => _pickImage(false), colorScheme: colorScheme, ), SizedBox(height: AppSpacing.xl), - // 提交按钮 + // 提交按鈕 SizedBox( width: double.infinity, child: NeonButton( - text: _isSubmitting ? '提交中...' : '提交认证', + text: _isSubmitting ? '提交中...' : '提交認證', type: NeonButtonType.primary, onPressed: _canSubmit ? _submitKyc : null, height: 48, @@ -187,7 +187,7 @@ class _KycPageState extends State { SizedBox(width: AppSpacing.sm), Expanded( child: Text( - '您的身份信息将被加密存储,仅用于身份验证', + '您的身份信息將被加密存儲,僅用於身份驗證', style: AppTextStyles.bodySmall(context).copyWith( color: AppColorScheme.up.withOpacity(0.8), ), @@ -209,7 +209,7 @@ class _KycPageState extends State { children: [ _buildStepCircle( number: '1', - label: '上传证件', + label: '上傳證件', isActive: true, isComplete: isComplete, colorScheme: colorScheme, @@ -224,7 +224,7 @@ class _KycPageState extends State { ), _buildStepCircle( number: '2', - label: '认证完成', + label: '認證完成', isActive: false, isComplete: false, colorScheme: colorScheme, @@ -317,12 +317,12 @@ class _KycPageState extends State { child: Stack( fit: StackFit.expand, children: [ - // 图片预览 - 使用 memory 以兼容 Web + // 圖片預覽 - 使用 memory 以兼容 Web Image.memory( imageBytes!, fit: BoxFit.cover, ), - // 底部渐变遮罩 + 文字 + // 底部漸變遮罩 + 文字 Positioned( left: 0, right: 0, @@ -348,7 +348,7 @@ class _KycPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '$label已选择', + '$label已選擇', style: AppTextStyles.labelLarge(context).copyWith( color: colorScheme.onPrimary, ), @@ -400,7 +400,7 @@ class _KycPageState extends State { ), SizedBox(height: AppSpacing.sm), Text( - '点击上传$label', + '點擊上傳$label', style: AppTextStyles.bodyLarge(context).copyWith( color: colorScheme.onSurfaceVariant.withOpacity(0.6), ), @@ -442,13 +442,13 @@ class _KycPageState extends State { size: 20, ), SizedBox(width: AppSpacing.sm), - const Text('认证成功'), + const Text('認證成功'), ], ), - description: const Text('您的实名认证已通过,现在可以进行提现操作'), + description: const Text('您的實名認證已通過,現在可以進行提現操作'), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () { Navigator.of(ctx).pop(); Navigator.of(context).pop(); @@ -461,11 +461,11 @@ class _KycPageState extends State { showShadDialog( context: context, builder: (ctx) => ShadDialog.alert( - title: const Text('认证失败'), - description: Text(response.message ?? '请稍后重试'), + title: const Text('認證失敗'), + description: Text(response.message ?? '請稍後重試'), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(ctx).pop(), ), ], @@ -477,11 +477,11 @@ class _KycPageState extends State { showShadDialog( context: context, builder: (ctx) => ShadDialog.alert( - title: const Text('认证失败'), + title: const Text('認證失敗'), description: Text(e.toString()), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(ctx).pop(), ), ], @@ -494,7 +494,7 @@ class _KycPageState extends State { } } -/// 虚线边框画笔 +/// 虛線邊框畫筆 class _DashedBorderPainter extends CustomPainter { final Color color; final double borderRadius; diff --git a/flutter_monisuo/lib/ui/pages/mine/mine_page.dart b/flutter_monisuo/lib/ui/pages/mine/mine_page.dart index e04b796..c55e418 100644 --- a/flutter_monisuo/lib/ui/pages/mine/mine_page.dart +++ b/flutter_monisuo/lib/ui/pages/mine/mine_page.dart @@ -13,7 +13,7 @@ import 'components/menu_group1.dart'; import 'components/menu_group2.dart'; import 'components/profile_card.dart'; -/// 我的页面 - 匹配 .pen 设计稿 +/// 我的頁面 - 匹配 .pen 設計稿 class MinePage extends StatefulWidget { const MinePage({super.key}); @@ -77,10 +77,10 @@ class _MinePageState extends State children: [ Icon(Icons.construction, color: AppColorScheme.warning, size: 20), SizedBox(width: AppSpacing.sm), - const Text('功能开发中'), + const Text('功能開發中'), ], ), - description: Text('$feature功能正在开发中,敬请期待~'), + description: Text('$feature功能正在開發中,敬請期待~'), actions: [ ShadButton( child: const Text('知道了'), @@ -100,7 +100,7 @@ class _MinePageState extends State children: [ AvatarCircle(radius: 20, fontSize: 16), SizedBox(width: AppSpacing.sm + AppSpacing.xs), - const Text('模拟所'), + const Text('模擬所'), ], ), child: Column( @@ -108,7 +108,7 @@ class _MinePageState extends State crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '虚拟货币模拟交易平台', + '虛擬貨幣模擬交易平臺', style: TextStyle(color: colorScheme.onSurfaceVariant), ), SizedBox(height: AppSpacing.md), @@ -121,7 +121,7 @@ class _MinePageState extends State ), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(context).pop(), ), ], @@ -133,8 +133,8 @@ class _MinePageState extends State showShadDialog( context: context, builder: (ctx) => ShadDialog.alert( - title: const Text('确认退出'), - description: const Text('确定要退出登录吗?'), + title: const Text('確認退出'), + description: const Text('確定要退出登錄嗎?'), actions: [ ShadButton.outline( child: const Text('取消'), diff --git a/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart b/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart index 51fbd93..6c65906 100644 --- a/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart +++ b/flutter_monisuo/lib/ui/pages/mine/welfare_center_page.dart @@ -11,7 +11,7 @@ import '../../../core/event/app_event_bus.dart'; import '../../../data/services/bonus_service.dart'; import '../../../providers/asset_provider.dart'; -/// 福利中心页面 +/// 福利中心頁面 class WelfareCenterPage extends StatefulWidget { const WelfareCenterPage({super.key}); @@ -45,10 +45,10 @@ class _WelfareCenterPageState extends State { } // ============================================ - // 容器样式辅助 + // 容器樣式輔助 // ============================================ - /// 标准卡片容器 + /// 標準卡片容器 BoxDecoration _cardDecoration({Color? borderColor}) { return BoxDecoration( color: context.appColors.surfaceCard, @@ -59,11 +59,11 @@ class _WelfareCenterPageState extends State { ); } - /// 金色渐变卡片容器 + /// 金色漸變卡片容器 BoxDecoration _goldGradientDecoration() { final isDark = context.isDark; - // Light Mode: 琥珀色渐变(从 amber 15% 到深灰 5%) - // Dark Mode: 金色渐变 + // Light Mode: 琥珀色漸變(從 amber 15% 到深灰 5%) + // Dark Mode: 金色漸變 final gradientColors = isDark ? [ context.appColors.accentPrimary.withValues(alpha: 0.15), @@ -90,7 +90,7 @@ class _WelfareCenterPageState extends State { ); } - /// 状态胶囊标签 + /// 狀態膠囊標籤 Widget _statusBadge(String text, Color textColor, Color bgColor) { return Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6), // [4,10] → [6,14] @@ -105,7 +105,7 @@ class _WelfareCenterPageState extends State { ); } - /// 全宽按钮 + /// 全寬按鈕 Widget _fullWidthButton({ required String text, required Color backgroundColor, @@ -192,7 +192,7 @@ class _WelfareCenterPageState extends State { } // ============================================ - // 推广码卡片(金色渐变边框 Hero Card) + // 推廣碼卡片(金色漸變邊框 Hero Card) // ============================================ Widget _buildReferralCodeCard(BuildContext context) { @@ -206,13 +206,13 @@ class _WelfareCenterPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // Header Row: gift icon + 标题 + // Header Row: gift icon + 標題 Row( children: [ Icon(LucideIcons.gift, color: goldAccent, size: 24), const SizedBox(width: 10), Text( - '我的邀请码', + '我的邀請碼', style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w700, ), @@ -221,9 +221,9 @@ class _WelfareCenterPageState extends State { ), const SizedBox(height: 16), Text( - referralCode.isEmpty ? '暂无邀请码' : referralCode, + referralCode.isEmpty ? '暫無邀請碼' : referralCode, style: AppTextStyles.displayMedium(context).copyWith( - fontSize: 24, // 明确设置为 24px + fontSize: 24, // 明確設置為 24px fontWeight: FontWeight.w800, color: goldAccent, letterSpacing: 2, @@ -238,7 +238,7 @@ class _WelfareCenterPageState extends State { ? null : () { Clipboard.setData(ClipboardData(text: referralCode)); - ToastUtils.show('邀请码已复制'); + ToastUtils.show('邀請碼已複製'); }, style: ElevatedButton.styleFrom( backgroundColor: goldAccent, @@ -250,7 +250,7 @@ class _WelfareCenterPageState extends State { disabledBackgroundColor: goldAccent.withValues(alpha: 0.4), ), child: Text( - '复制邀请码', + '複製邀請碼', style: AppTextStyles.headlineMedium(context).copyWith(color: context.colors.onPrimary), ), ), @@ -272,7 +272,7 @@ class _WelfareCenterPageState extends State { final claimed = newUserBonus?['claimed'] as bool? ?? false; final deposited = newUserBonus?['deposited'] as bool? ?? false; - // 状态判定 + // 狀態判定 String badgeText; bool showAvailableBadge; String buttonText; @@ -280,23 +280,23 @@ class _WelfareCenterPageState extends State { String description; if (claimed) { - badgeText = '已领取'; + badgeText = '已領取'; showAvailableBadge = false; - buttonText = '已领取'; + buttonText = '已領取'; canClaim = false; - description = '新人福利已领取'; + description = '新人福利已領取'; } else if (eligible) { - badgeText = '可领取'; + badgeText = '可領取'; showAvailableBadge = true; - buttonText = '立即领取'; + buttonText = '立即領取'; canClaim = true; - description = '完成首次充值即可领取'; + description = '完成首次充值即可領取'; } else { - badgeText = deposited ? '已充值' : '待解锁'; + badgeText = deposited ? '已充值' : '待解鎖'; showAvailableBadge = false; - buttonText = '未解锁'; + buttonText = '未解鎖'; canClaim = false; - description = deposited ? '已充值,等待系统确认' : '完成首次充值即可领取'; + description = deposited ? '已充值,等待系統確認' : '完成首次充值即可領取'; } return Container( @@ -306,7 +306,7 @@ class _WelfareCenterPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // Header: 标题 + 状态标签 + // Header: 標題 + 狀態標籤 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -348,14 +348,14 @@ class _WelfareCenterPageState extends State { } // ============================================ - // 推广奖励列表 + // 推廣獎勵列表 // ============================================ Widget _buildReferralRewardsSection(BuildContext context) { final referralRewards = _welfareData?['referralRewards'] as List? ?? []; - // 汇总统计 + // 彙總統計 int totalEarned = 0; int totalClaimable = 0; for (var r in referralRewards) { @@ -373,17 +373,17 @@ class _WelfareCenterPageState extends State { children: [ // Section Header Text( - '推广奖励', + '推廣獎勵', style: AppTextStyles.headlineLarge(context), ), const SizedBox(height: 4), Text( - '每邀请一位好友充值达标,奖励100 USDT', + '每邀請一位好友充值達標,獎勵100 USDT', style: AppTextStyles.bodySmall(context).copyWith( color: context.appColors.onSurfaceMuted, ), ), - // 汇总统计 + // 彙總統計 if (referralRewards.isNotEmpty) ...[ const SizedBox(height: 12), Container( @@ -395,12 +395,12 @@ class _WelfareCenterPageState extends State { ), child: Row( children: [ - _buildStatItem('已邀请', '${referralRewards.length}人'), + _buildStatItem('已邀請', '${referralRewards.length}人'), Container(width: 1, height: 20, color: context.appColors.ghostBorder), - _buildStatItem('已获得', '${totalEarned * 100} USDT'), + _buildStatItem('已獲得', '${totalEarned * 100} USDT'), if (totalClaimable > 0) ...[ Container(width: 1, height: 20, color: context.appColors.ghostBorder), - _buildStatItem('待领取', '$totalClaimable个', highlight: true), + _buildStatItem('待領取', '$totalClaimable個', highlight: true), ], ], ), @@ -408,7 +408,7 @@ class _WelfareCenterPageState extends State { ], const SizedBox(height: 12), - // 推广列表卡片 + // 推廣列表卡片 Container( width: double.infinity, decoration: _cardDecoration(), @@ -450,7 +450,7 @@ class _WelfareCenterPageState extends State { ), const SizedBox(height: 8), Text( - '暂无推广用户', + '暫無推廣用戶', style: AppTextStyles.bodyLarge(context).copyWith( color: context.colors.onSurfaceVariant, ), @@ -470,18 +470,21 @@ class _WelfareCenterPageState extends State { final claimableCount = data['claimableCount'] as int? ?? 0; final milestones = data['milestones'] as List? ?? []; final userId = data['userId'] as int? ?? 0; + final indirectRefCount = data['indirectRefCount'] as int? ?? 0; + final indirectClaimableCount = data['indirectClaimableCount'] as int? ?? 0; + final indirectMilestones = data['indirectMilestones'] as List? ?? []; final isLast = index == referralRewards.length - 1; - // 进度计算 + // 進度計算 final progress = _computeProgress(milestones, totalDeposit); - // 操作按钮 + // 操作按鈕 final actionWidget = _buildReferralAction( data: data, claimableCount: claimableCount, milestones: milestones, progress: progress, ); - // 进度条颜色 + // 進度條顏色 final progressColor = _referralProgressColor(claimableCount, progress); return Column( @@ -526,11 +529,21 @@ class _WelfareCenterPageState extends State { ), ), ), - // 里程碑详情 + // 里程碑詳情 if (milestones.isNotEmpty) ...[ const SizedBox(height: 12), _buildMilestoneDetails(milestones, userId), ], + // 間接推廣獎勵 + if (indirectRefCount > 0) ...[ + const SizedBox(height: 12), + _buildIndirectSection( + userId, + indirectRefCount, + indirectClaimableCount, + indirectMilestones, + ), + ], ], ), ), @@ -546,7 +559,7 @@ class _WelfareCenterPageState extends State { ); } - /// 里程碑详情行 — 显示每个里程碑状态 + /// 里程碑詳情行 — 顯示每個里程碑狀態 Widget _buildMilestoneDetails(List milestones, int userId) { final upColor = context.appColors.up; @@ -625,7 +638,7 @@ class _WelfareCenterPageState extends State { ); } - /// 计算推荐奖励进度 + /// 計算推薦獎勵進度 double _computeProgress(List milestones, String totalDeposit) { if (milestones.isNotEmpty) { int earnedCount = milestones.where((m) { @@ -638,14 +651,14 @@ class _WelfareCenterPageState extends State { return (deposit / 1000).clamp(0.0, 1.0); } - /// 根据状态获取进度条颜色 + /// 根據狀態獲取進度條顏色 Color _referralProgressColor(int claimableCount, double progress) { if (claimableCount > 0) return context.appColors.up; if (progress > 0) return context.appColors.accentPrimary; return context.appColors.surfaceCardHigh; } - /// 构建推荐奖励的操作按钮 + /// 構建推薦獎勵的操作按鈕 Widget? _buildReferralAction({ required Map data, required int claimableCount, @@ -665,21 +678,136 @@ class _WelfareCenterPageState extends State { return GestureDetector( onTap: () => _claimReferralBonus(data['userId'] as int, milestoneValue), - child: _statusBadge('领取', profitGreen, profitGreenBg), + child: _statusBadge('領取', profitGreen, profitGreenBg), ); } if (progress > 0) { final warningColor = AppColorScheme.warning; - return _statusBadge('进行中', warningColor, warningColor.withValues(alpha: 0.15)); + return _statusBadge('進行中', warningColor, warningColor.withValues(alpha: 0.15)); } return Text( - '待达标', + '待達標', style: AppTextStyles.labelLarge(context).copyWith(color: context.appColors.onSurfaceMuted), ); } // ============================================ - // 奖励规则卡片 + // 間接推廣獎勵區塊 + // ============================================ + + Widget _buildIndirectSection( + int directReferralId, + int indirectRefCount, + int indirectClaimableCount, + List indirectMilestones, + ) { + final goldAccent = context.appColors.accentPrimary; + + return Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: context.appColors.surfaceCardHigh.withValues(alpha: 0.5), + borderRadius: BorderRadius.circular(AppRadius.md), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Icon(LucideIcons.users, size: 14, color: goldAccent), + const SizedBox(width: 6), + Text( + '已推廣 $indirectRefCount 人', + style: AppTextStyles.bodyMedium(context).copyWith( + color: context.colors.onSurfaceVariant, + ), + ), + if (indirectClaimableCount > 0) ...[ + const Spacer(), + _statusBadge( + '$indirectClaimableCount 個可領', + context.appColors.up, + context.appColors.upBackground, + ), + ], + ], + ), + // 間接里程碑標籤 + if (indirectMilestones.isNotEmpty) ...[ + const SizedBox(height: 8), + _buildIndirectMilestoneTags(directReferralId, indirectMilestones), + ], + ], + ), + ); + } + + Widget _buildIndirectMilestoneTags(int directReferralId, List milestones) { + final upColor = context.appColors.up; + + return Wrap( + spacing: 6, + runSpacing: 6, + children: milestones.map((m) { + final ms = m as Map; + final milestoneVal = ms['milestone'] as int? ?? 1; + final earned = ms['earned'] as bool? ?? false; + final claimed = ms['claimed'] as bool? ?? false; + final claimable = ms['claimable'] as bool? ?? false; + final indirectReferredUserId = ms['indirectReferredUserId'] as int? ?? 0; + + // 不顯示未達標的里程碑 + if (!earned && !claimed) return const SizedBox.shrink(); + + Color bgColor; + Color textColor; + String label; + + if (claimed) { + bgColor = upColor.withValues(alpha: 0.1); + textColor = upColor; + label = '50\u2713'; + } else if (claimable) { + bgColor = context.appColors.accentPrimary.withValues(alpha: 0.15); + textColor = context.appColors.accentPrimary; + label = '50\u{1F381}'; + } else { + bgColor = context.appColors.surfaceCardHigh; + textColor = context.colors.onSurfaceVariant; + label = '50'; + } + + return GestureDetector( + onTap: claimable + ? () => _claimIndirectReferralBonus( + directReferralId, + indirectReferredUserId, + milestoneVal, + ) + : null, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: bgColor, + borderRadius: BorderRadius.circular(AppRadius.sm), + border: claimable ? Border.all(color: textColor.withValues(alpha: 0.3)) : null, + ), + child: Text( + label, + style: AppTextStyles.bodySmall(context).copyWith( + fontSize: 11, + fontWeight: FontWeight.w600, + color: textColor, + ), + ), + ), + ); + }).toList(), + ); + } + + // ============================================ + // 獎勵規則卡片 // ============================================ Widget _buildRulesCard(BuildContext context) { @@ -694,13 +822,14 @@ class _WelfareCenterPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - '奖励规则', + '獎勵規則', style: AppTextStyles.headlineSmall(context), ), const SizedBox(height: 8), - _buildRuleItem('新用户注册完成实名认证奖励 100 USDT'), - _buildRuleItem('邀请好友充值每达 1000 USDT,双方各获得 100 USDT'), - _buildRuleItem('奖励直接发放至资金账户'), + _buildRuleItem('新用戶註冊完成實名認證獎勵 100 USDT'), + _buildRuleItem('邀請好友充值每達 1000 USDT,獎勵 100 USDT'), + _buildRuleItem('好友推廣的人充值每達 1000 USDT,額外獎勵 50 USDT'), + _buildRuleItem('獎勵直接發放至資金賬戶'), ], ), ); @@ -719,7 +848,7 @@ class _WelfareCenterPageState extends State { } // ============================================ - // 业务逻辑 + // 業務邏輯 // ============================================ Future _claimNewUserBonus() async { @@ -731,13 +860,13 @@ class _WelfareCenterPageState extends State { if (response.success) { context.read().refreshAll(force: true); context.read().fire(AppEventType.assetChanged); - ToastUtils.show('领取成功!100 USDT 已到账'); + ToastUtils.show('領取成功!100 USDT 已到賬'); _loadData(); } else { - ToastUtils.show(response.message ?? '领取失败'); + ToastUtils.show(response.message ?? '領取失敗'); } } catch (e) { - ToastUtils.show('领取失败: $e'); + ToastUtils.show('領取失敗: $e'); } } @@ -753,13 +882,40 @@ class _WelfareCenterPageState extends State { if (response.success) { context.read().refreshAll(force: true); context.read().fire(AppEventType.assetChanged); - ToastUtils.show('领取成功!100 USDT 已到账'); + ToastUtils.show('領取成功!100 USDT 已到賬'); _loadData(); } else { - ToastUtils.show(response.message ?? '领取失败'); + ToastUtils.show(response.message ?? '領取失敗'); } } catch (e) { - ToastUtils.show('领取失败: $e'); + ToastUtils.show('領取失敗: $e'); + } + } + + Future _claimIndirectReferralBonus( + int directReferralId, + int indirectReferredUserId, + int milestone, + ) async { + try { + final bonusService = context.read(); + final response = await bonusService.claimIndirectReferralBonus( + directReferralId, + indirectReferredUserId, + milestone, + ); + if (!mounted) return; + + if (response.success) { + context.read().refreshAll(force: true); + context.read().fire(AppEventType.assetChanged); + ToastUtils.show('領取成功!50 USDT 已到賬'); + _loadData(); + } else { + ToastUtils.show(response.message ?? '領取失敗'); + } + } catch (e) { + ToastUtils.show('領取失敗: $e'); } } } diff --git a/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart b/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart index dd56f7d..41d1520 100644 --- a/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart +++ b/flutter_monisuo/lib/ui/pages/onboarding/onboarding_page.dart @@ -6,12 +6,12 @@ import '../../../core/theme/app_theme.dart'; import '../../../core/theme/app_theme_extension.dart'; import '../../../core/storage/local_storage.dart'; -/// 引导页数据模型 +/// 引導頁數據模型 class _OnboardingItem { final String title; final String description; - final IconData? icon; // 图标(二选一) - final String? imagePath; // 图片路径(二选一) + final IconData? icon; // 圖標(二選一) + final String? imagePath; // 圖片路徑(二選一) final List gradientColors; const _OnboardingItem({ @@ -23,7 +23,7 @@ class _OnboardingItem { }); } -/// 首次启动引导页 +/// 首次啟動引導頁 class OnboardingPage extends StatefulWidget { final VoidCallback onComplete; @@ -39,27 +39,27 @@ class _OnboardingPageState extends State { final _items = const [ _OnboardingItem( - title: '实时行情', - description: '全球市场行情实时更新,把握每一个投资机会', - imagePath: 'assets/images/onboarding_1.png', // 替换为你的图片 + title: '實時行情', + description: '全球市場行情實時更新,把握每一個投資機會', + imagePath: 'assets/images/onboarding_1.png', // 替換為你的圖片 gradientColors: [AppColorScheme.darkPrimary, AppColorScheme.darkPrimaryContainer], ), _OnboardingItem( - title: '模拟交易', - description: '零风险体验真实交易,学习投资策略', - imagePath: 'assets/images/onboarding_2.png', // 替换为你的图片 + title: '模擬交易', + description: '零風險體驗真實交易,學習投資策略', + imagePath: 'assets/images/onboarding_2.png', // 替換為你的圖片 gradientColors: [AppColorScheme.darkTertiary, AppColorScheme.darkTertiaryContainer], ), _OnboardingItem( - title: '资产管理', - description: '清晰的资产概览,轻松管理你的投资组合', - imagePath: 'assets/images/onboarding_3.png', // 替换为你的图片 + title: '資產管理', + description: '清晰的資產概覽,輕鬆管理你的投資組合', + imagePath: 'assets/images/onboarding_3.png', // 替換為你的圖片 gradientColors: [AppColorScheme.darkSecondary, AppColorScheme.darkSecondaryFixed], ), _OnboardingItem( title: '安全可靠', - description: '数据加密存储,保护你的隐私安全', - imagePath: 'assets/images/onboarding_4.png', // 替换为你的图片 + description: '數據加密存儲,保護你的隱私安全', + imagePath: 'assets/images/onboarding_4.png', // 替換為你的圖片 gradientColors: [AppColorScheme.darkPrimaryFixed, AppColorScheme.darkPrimaryFixedDim], ), ]; @@ -97,7 +97,7 @@ class _OnboardingPageState extends State { body: SafeArea( child: Column( children: [ - // 顶部跳过按钮 + // 頂部跳過按鈕 Padding( padding: const EdgeInsets.symmetric( horizontal: AppSpacing.lg, @@ -109,7 +109,7 @@ class _OnboardingPageState extends State { TextButton( onPressed: _skip, child: Text( - '跳过', + '跳過', style: AppTextStyles.headlineMedium(context).copyWith( color: context.colors.onSurfaceVariant, ), @@ -118,7 +118,7 @@ class _OnboardingPageState extends State { ], ), ), - // 页面内容 + // 頁面內容 Expanded( child: PageView.builder( controller: _pageController, @@ -133,7 +133,7 @@ class _OnboardingPageState extends State { }, ), ), - // 底部指示器和按钮 + // 底部指示器和按鈕 Padding( padding: const EdgeInsets.fromLTRB( AppSpacing.lg, @@ -143,7 +143,7 @@ class _OnboardingPageState extends State { ), child: Column( children: [ - // 页面指示器 + // 頁面指示器 Row( mainAxisAlignment: MainAxisAlignment.center, children: List.generate( @@ -152,7 +152,7 @@ class _OnboardingPageState extends State { ), ), const SizedBox(height: AppSpacing.xl), - // 下一步/开始按钮 + // 下一步/開始按鈕 SizedBox( width: double.infinity, height: 56, @@ -167,7 +167,7 @@ class _OnboardingPageState extends State { elevation: 0, ), child: Text( - _currentPage == _items.length - 1 ? '开始使用' : '下一步', + _currentPage == _items.length - 1 ? '開始使用' : '下一步', style: AppTextStyles.headlineLarge(context).copyWith( fontWeight: FontWeight.w600, ), @@ -189,7 +189,7 @@ class _OnboardingPageState extends State { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - // 图标/图片容器 + // 圖標/圖片容器 Container( width: 200, height: 200, @@ -217,7 +217,7 @@ class _OnboardingPageState extends State { height: 180, fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { - // 图片加载失败时显示图标 + // 圖片加載失敗時顯示圖標 return Icon( item.icon ?? LucideIcons.image, size: 72, @@ -234,7 +234,7 @@ class _OnboardingPageState extends State { ), ), const SizedBox(height: AppSpacing.xxl + AppSpacing.lg), - // 标题 + // 標題 Text( item.title, style: AppTextStyles.displaySmall(context).copyWith( diff --git a/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart b/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart index 711d1ff..8df2707 100644 --- a/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart +++ b/flutter_monisuo/lib/ui/pages/orders/fund_order_card.dart @@ -14,7 +14,7 @@ class _FundOrderCard extends StatelessWidget { Color _getStatusColor(int status, bool isDeposit) { if (isDeposit) { - // 充值状态: 1=待付款, 2=待确认, 3=已完成, 4=已驳回, 5=已取消 + // 充值狀態: 1=待付款, 2=待確認, 3=已完成, 4=已駁回, 5=已取消 switch (status) { case 1: return AppColorScheme.warning; @@ -30,7 +30,7 @@ class _FundOrderCard extends StatelessWidget { return AppColorScheme.muted; } } else { - // 提现状态: 1=待审批, 2=已出款, 3=已驳回, 4=已取消, 5=待财务审核 + // 提現狀態: 1=待審批, 2=已出款, 3=已駁回, 4=已取消, 5=待財務審核 switch (status) { case 1: return AppColorScheme.warning; @@ -54,11 +54,11 @@ class _FundOrderCard extends StatelessWidget { case 1: return '待付款'; case 2: - return '待确认'; + return '待確認'; case 3: return '已完成'; case 4: - return '已驳回'; + return '已駁回'; case 5: return '已取消'; default: @@ -67,15 +67,15 @@ class _FundOrderCard extends StatelessWidget { } else { switch (status) { case 1: - return '待审批'; + return '待審批'; case 2: return '已出款'; case 3: - return '已驳回'; + return '已駁回'; case 4: return '已取消'; case 5: - return '待财务审核'; + return '待財務審核'; default: return '未知'; } @@ -121,7 +121,7 @@ class _FundOrderCard extends StatelessWidget { if (order.fee != null) ...[ Row( children: [ - Text('手续费(10%): ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('手續費(10%): ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text('-${order.fee} USDT', style: AppTextStyles.bodyMedium(context)), ], ), @@ -130,7 +130,7 @@ class _FundOrderCard extends StatelessWidget { if (order.receivableAmount != null) ...[ Row( children: [ - Text('到账金额: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('到賬金額: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text('${order.receivableAmount} USDT', style: AppTextStyles.bodyMedium(context).copyWith(fontWeight: FontWeight.w700)), ], ), @@ -139,7 +139,7 @@ class _FundOrderCard extends StatelessWidget { if (order.network != null) ...[ Row( children: [ - Text('提现网络: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('提現網絡: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text(order.network!, style: AppTextStyles.bodyMedium(context)), ], ), @@ -148,7 +148,7 @@ class _FundOrderCard extends StatelessWidget { if (order.walletAddress != null) ...[ Row( children: [ - Text('提现地址: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('提現地址: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Expanded( child: Text( order.walletAddress!, @@ -164,16 +164,16 @@ class _FundOrderCard extends StatelessWidget { ], Row( children: [ - Text('订单号: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('訂單號: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text(order.orderNo, style: AppTextStyles.bodyMedium(context)), ], ), SizedBox(height: AppSpacing.xs), Row( children: [ - Text('创建时间: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('創建時間: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text( - order.createTime?.toString() ?? '无', + order.createTime?.toString() ?? '無', style: AppTextStyles.bodyMedium(context), ), ], @@ -182,7 +182,7 @@ class _FundOrderCard extends StatelessWidget { SizedBox(height: AppSpacing.xs), Row( children: [ - Text('驳回原因: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('駁回原因: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Expanded( child: Text( order.rejectReason!, @@ -206,7 +206,7 @@ class _FundOrderCard extends StatelessWidget { Expanded( child: ShadButton.outline( onPressed: () => _handleCancel(context), - child: const Text('取消订单'), + child: const Text('取消訂單'), ), ), ], @@ -222,12 +222,12 @@ class _FundOrderCard extends StatelessWidget { if (context.mounted) { if (response.success) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('已确认打款,请等待审核')), + const SnackBar(content: Text('已確認打款,請等待審核')), ); context.read().loadFundOrders(); } else { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(response.message ?? '确认失败')), + SnackBar(content: Text(response.message ?? '確認失敗')), ); } } @@ -238,12 +238,12 @@ class _FundOrderCard extends StatelessWidget { if (context.mounted) { if (response.success) { ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text('订单已取消')), + const SnackBar(content: Text('訂單已取消')), ); context.read().loadFundOrders(); } else { ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(response.message ?? '取消失败')), + SnackBar(content: Text(response.message ?? '取消失敗')), ); } } diff --git a/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart b/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart index ad9f3ac..779f4cc 100644 --- a/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart +++ b/flutter_monisuo/lib/ui/pages/orders/fund_orders_list.dart @@ -22,7 +22,7 @@ class FundOrdersList extends StatelessWidget { if (orders.isEmpty) { return _EmptyState( icon: LucideIcons.receipt, - message: '暂无订单记录', + message: '暫無訂單記錄', ); } @@ -43,7 +43,7 @@ class FundOrdersList extends StatelessWidget { } } -/// 空状态组件 +/// 空狀態組件 class _EmptyState extends StatelessWidget { final IconData icon; final String message; @@ -70,7 +70,7 @@ class _EmptyState extends StatelessWidget { } } -/// 充值订单卡片 - 公开类 +/// 充值訂單卡片 - 公開類 class FundOrderCard extends StatelessWidget { final OrderFund order; @@ -78,12 +78,12 @@ class FundOrderCard extends StatelessWidget { @override Widget build(BuildContext context) { - // 直接使用 _FundOrderCard 的实现 + // 直接使用 _FundOrderCard 的實現 return _FundOrderCardContent(order: order); } } -/// 订单卡片内容 +/// 訂單卡片內容 class _FundOrderCardContent extends StatelessWidget { final OrderFund order; @@ -127,11 +127,11 @@ class _FundOrderCardContent extends StatelessWidget { case 1: return '待付款'; case 2: - return '待确认'; + return '待確認'; case 3: return '已完成'; case 4: - return '已驳回'; + return '已駁回'; case 5: return '已取消'; default: @@ -140,11 +140,11 @@ class _FundOrderCardContent extends StatelessWidget { } else { switch (status) { case 1: - return '待审批'; + return '待審批'; case 2: return '已出款'; case 3: - return '已驳回'; + return '已駁回'; case 4: return '已取消'; default: @@ -192,7 +192,7 @@ class _FundOrderCardContent extends StatelessWidget { if (order.fee != null) ...[ Row( children: [ - Text('手续费(10%): ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('手續費(10%): ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text('-${order.fee} USDT', style: AppTextStyles.bodyMedium(context)), ], ), @@ -201,7 +201,7 @@ class _FundOrderCardContent extends StatelessWidget { if (order.receivableAmount != null) ...[ Row( children: [ - Text('到账金额: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('到賬金額: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text('${order.receivableAmount} USDT', style: AppTextStyles.bodyMedium(context).copyWith(fontWeight: FontWeight.w700)), ], ), @@ -210,7 +210,7 @@ class _FundOrderCardContent extends StatelessWidget { if (order.network != null) ...[ Row( children: [ - Text('提现网络: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('提現網絡: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text(order.network!, style: AppTextStyles.bodyMedium(context)), ], ), @@ -219,7 +219,7 @@ class _FundOrderCardContent extends StatelessWidget { if (order.walletAddress != null) ...[ Row( children: [ - Text('提现地址: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('提現地址: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Expanded( child: Text( order.walletAddress!, @@ -234,16 +234,16 @@ class _FundOrderCardContent extends StatelessWidget { ], Row( children: [ - Text('订单号: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('訂單號: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text(order.orderNo, style: AppTextStyles.bodyMedium(context)), ], ), SizedBox(height: AppSpacing.xs), Row( children: [ - Text('创建时间: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), + Text('創建時間: ', style: AppTextStyles.bodyMedium(context).copyWith(color: theme.colorScheme.mutedForeground)), Text( - order.createTime?.toString() ?? '无', + order.createTime?.toString() ?? '無', style: AppTextStyles.bodyMedium(context), ), ], diff --git a/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart b/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart index 6ac9a49..6d16c14 100644 --- a/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart +++ b/flutter_monisuo/lib/ui/pages/orders/fund_orders_page.dart @@ -13,7 +13,7 @@ import '../../../core/event/app_event_bus.dart'; import '../../../providers/asset_provider.dart'; import '../../../data/models/order_models.dart'; -/// 充提订单页面 +/// 充提訂單頁面 class FundOrdersPage extends StatefulWidget { const FundOrdersPage({super.key}); @@ -22,7 +22,7 @@ class FundOrdersPage extends StatefulWidget { } class _FundOrdersPageState extends State { - int _activeTab = 0; // 0=全部, 1=充值, 2=提现 + int _activeTab = 0; // 0=全部, 1=充值, 2=提現 StreamSubscription? _eventSub; @override @@ -53,7 +53,7 @@ class _FundOrdersPageState extends State { } // ============================================ - // 构建 UI + // 構建 UI // ============================================ @override @@ -65,7 +65,7 @@ class _FundOrdersPageState extends State { icon: const Icon(LucideIcons.arrowLeft, size: 20), onPressed: () => Navigator.of(context).pop(), ), - title: Text('充提记录', style: AppTextStyles.headlineLarge(context).copyWith(color: context.colors.onSurface)), + title: Text('充提記錄', style: AppTextStyles.headlineLarge(context).copyWith(color: context.colors.onSurface)), backgroundColor: context.colors.surface, elevation: 0, scrolledUnderElevation: 0, @@ -97,7 +97,7 @@ class _FundOrdersPageState extends State { children: [ _buildPillTab('全部', 0), _buildPillTab('充值', 1), - _buildPillTab('提现', 2), + _buildPillTab('提現', 2), ], ), ), @@ -153,7 +153,7 @@ class _FundOrdersPageState extends State { children: [ Icon(LucideIcons.inbox, size: 64, color: context.appColors.onSurfaceMuted), const SizedBox(height: AppSpacing.md), - Text('暂无订单记录', style: AppTextStyles.headlineMedium(context).copyWith(color: context.colors.onSurfaceVariant)), + Text('暫無訂單記錄', style: AppTextStyles.headlineMedium(context).copyWith(color: context.colors.onSurfaceVariant)), ], ), ); @@ -199,7 +199,7 @@ class _FundOrdersPageState extends State { ], if (order.withdrawContact != null) ...[ const SizedBox(height: AppSpacing.sm - AppSpacing.xs), - _buildDetailRow('联系方式', order.withdrawContact!), + _buildDetailRow('聯繫方式', order.withdrawContact!), ], if (order.receivableAmount != null && !order.isDeposit) ...[ const SizedBox(height: AppSpacing.sm), @@ -214,13 +214,13 @@ class _FundOrdersPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - '创建: ${_formatTime(order.createTime)}', + '創建: ${_formatTime(order.createTime)}', style: AppTextStyles.bodySmall(context).copyWith(color: context.appColors.onSurfaceMuted), ), if (order.rejectReason != null) Expanded( child: Text( - '驳回: ${order.rejectReason}', + '駁回: ${order.rejectReason}', style: AppTextStyles.bodySmall(context).copyWith(color: context.appColors.down), textAlign: TextAlign.right, overflow: TextOverflow.ellipsis, @@ -241,7 +241,7 @@ class _FundOrdersPageState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - order.isDeposit ? '充值' : '提现', + order.isDeposit ? '充值' : '提現', style: AppTextStyles.headlineMedium(context).copyWith(color: context.colors.onSurface), ), _buildStatusBadge(order), @@ -261,7 +261,7 @@ class _FundOrdersPageState extends State { if (order.isDeposit) { switch (order.status) { case 1: // 待付款 - case 2: // 待确认 + case 2: // 待確認 bgColor = AppColorScheme.warning.withValues(alpha: 0.12); textColor = AppColorScheme.warning; break; @@ -269,14 +269,14 @@ class _FundOrdersPageState extends State { bgColor = upBg; textColor = upColor; break; - default: // 已驳回/已取消 + default: // 已駁回/已取消 bgColor = downBg; textColor = downColor; } } else { switch (order.status) { - case 1: // 待审批 - case 5: // 待财务审核 + case 1: // 待審批 + case 5: // 待財務審核 bgColor = AppColorScheme.warning.withValues(alpha: 0.12); textColor = AppColorScheme.warning; break; @@ -284,7 +284,7 @@ class _FundOrdersPageState extends State { bgColor = upBg; textColor = upColor; break; - default: // 已驳回/已取消 + default: // 已駁回/已取消 bgColor = downBg; textColor = downColor; } @@ -320,10 +320,10 @@ class _FundOrdersPageState extends State { Widget _buildDetailRows(OrderFund order) { return Column( children: [ - _buildDetailRow('订单号', order.orderNo), + _buildDetailRow('訂單號', order.orderNo), const SizedBox(height: AppSpacing.sm - AppSpacing.xs), if (order.network != null) ...[ - _buildDetailRow('网络', order.network!), + _buildDetailRow('網絡', order.network!), const SizedBox(height: AppSpacing.sm - AppSpacing.xs), ], if (order.walletAddress != null) ...[ @@ -333,7 +333,7 @@ class _FundOrdersPageState extends State { trailing: GestureDetector( onTap: () { Clipboard.setData(ClipboardData(text: order.walletAddress!)); - ToastUtils.show('地址已复制'); + ToastUtils.show('地址已複製'); }, child: Icon(LucideIcons.copy, size: 14, color: context.appColors.onSurfaceMuted), ), @@ -341,11 +341,11 @@ class _FundOrdersPageState extends State { const SizedBox(height: AppSpacing.sm - AppSpacing.xs), ], if (order.fee != null && !order.isDeposit) ...[ - _buildDetailRow('手续费', '${order.fee}%'), + _buildDetailRow('手續費', '${order.fee}%'), const SizedBox(height: AppSpacing.sm - AppSpacing.xs), ], _buildDetailRow( - '时间', + '時間', _formatTime(order.createTime), ), ], @@ -383,7 +383,7 @@ class _FundOrdersPageState extends State { // --------------------------------------------------------------------------- Widget _buildRejectionReason(OrderFund order) { return Text( - '拒绝原因: ${order.rejectReason}', + '拒絕原因: ${order.rejectReason}', style: AppTextStyles.bodyMedium(context).copyWith(color: context.appColors.down), ); } @@ -401,7 +401,7 @@ class _FundOrdersPageState extends State { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('应付金额', style: AppTextStyles.headlineSmall(context).copyWith(color: context.colors.onSurfaceVariant)), + Text('應付金額', style: AppTextStyles.headlineSmall(context).copyWith(color: context.colors.onSurfaceVariant)), Text('${order.receivableAmount} USDT', style: AppTextStyles.headlineMedium(context).copyWith(color: context.colors.onSurface)), ], ), @@ -427,7 +427,7 @@ class _FundOrdersPageState extends State { borderRadius: AppRadius.radiusSm, border: Border.all(color: downColor, width: 1), ), - child: Text('取消订单', style: AppTextStyles.headlineSmall(context).copyWith(color: downColor)), + child: Text('取消訂單', style: AppTextStyles.headlineSmall(context).copyWith(color: downColor)), ), ), if (order.canCancel && order.canConfirmPay) @@ -467,14 +467,14 @@ class _FundOrdersPageState extends State { void _confirmPay(OrderFund order) async { final confirmed = await showShadConfirmDialog( context: context, - title: '确认已打款', - description: '确认您已完成向指定地址的转账?', + title: '確認已打款', + description: '確認您已完成向指定地址的轉賬?', ); if (confirmed == true && mounted) { final response = await context.read().confirmPay(order.orderNo); if (mounted) { - BotToast.showText(text: response.success ? '确认成功,请等待审核' : response.message ?? '确认失败'); + BotToast.showText(text: response.success ? '確認成功,請等待審核' : response.message ?? '確認失敗'); } } } @@ -482,15 +482,15 @@ class _FundOrdersPageState extends State { void _cancelOrder(OrderFund order) async { final confirmed = await showShadConfirmDialog( context: context, - title: '取消订单', - description: '确定要取消订单 ${order.orderNo} 吗?', + title: '取消訂單', + description: '確定要取消訂單 ${order.orderNo} 嗎?', destructive: true, ); if (confirmed == true && mounted) { final response = await context.read().cancelOrder(order.orderNo); if (mounted) { - BotToast.showText(text: response.success ? '订单已取消' : response.message ?? '取消失败'); + BotToast.showText(text: response.success ? '訂單已取消' : response.message ?? '取消失敗'); } } } @@ -512,7 +512,7 @@ class _FundOrdersPageState extends State { onPressed: () => Navigator.pop(context, false), ), TextButton( - child: Text(destructive ? '确定取消' : '确认'), + child: Text(destructive ? '確定取消' : '確認'), onPressed: () => Navigator.pop(context, true), ), ], diff --git a/flutter_monisuo/lib/ui/pages/orders/orders_page.dart b/flutter_monisuo/lib/ui/pages/orders/orders_page.dart index 97ddc42..8ed4e20 100644 --- a/flutter_monisuo/lib/ui/pages/orders/orders_page.dart +++ b/flutter_monisuo/lib/ui/pages/orders/orders_page.dart @@ -8,7 +8,7 @@ import '../../../core/theme/app_theme_extension.dart'; import '../../../providers/asset_provider.dart'; import 'fund_orders_list.dart'; -/// 订单管理页面 +/// 訂單管理頁面 class OrdersPage extends StatefulWidget { const OrdersPage({super.key}); @@ -50,7 +50,7 @@ class _OrdersPageState extends State with AutomaticKeepAliveClientMi child: Column( children: [ TabSelector( - tabs: const ['订单记录', '交易记录'], + tabs: const ['訂單記錄', '交易記錄'], selectedIndex: _activeTab, onChanged: (index) => setState(() => _activeTab = index), ), @@ -68,7 +68,7 @@ class _OrdersPageState extends State with AutomaticKeepAliveClientMi } } -/// Tab 选择器 +/// Tab 選擇器 class TabSelector extends StatelessWidget { final List tabs; final int selectedIndex; @@ -129,7 +129,7 @@ class TabSelector extends StatelessWidget { } } -/// 交易订单列表 +/// 交易訂單列表 class TradeOrdersList extends StatelessWidget { final AssetProvider provider; @@ -147,7 +147,7 @@ class TradeOrdersList extends StatelessWidget { children: [ Icon(LucideIcons.receipt, size: 48, color: theme.colorScheme.mutedForeground), SizedBox(height: AppSpacing.sm + AppSpacing.xs), - Text('暂无交易记录', style: theme.textTheme.muted), + Text('暫無交易記錄', style: theme.textTheme.muted), ], ), ), diff --git a/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart b/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart index 697ee14..ef918d1 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/amount_input.dart @@ -3,10 +3,10 @@ import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; -/// 金额输入框组件(含超额提示) +/// 金額輸入框組件(含超額提示) /// -/// 设计稿:bg-tertiary,圆角md,高48。 -/// 输入金额超过可用 USDT 余额时显示警告提示。 +/// 設計稿:bg-tertiary,圓角md,高48。 +/// 輸入金額超過可用 USDT 餘額時顯示警告提示。 class AmountInput extends StatefulWidget { final TextEditingController amountController; final String maxAmount; @@ -63,7 +63,7 @@ class _AmountInputState extends State { Container( height: 48, decoration: BoxDecoration( - color: colorScheme.surfaceContainerHighest.withOpacity(0.5), // 调整透明度 + color: colorScheme.surfaceContainerHighest.withOpacity(0.5), // 調整透明度 borderRadius: BorderRadius.circular(AppRadius.md), ), child: TextField( @@ -74,7 +74,7 @@ class _AmountInputState extends State { fontWeight: FontWeight.w400, ), decoration: InputDecoration( - hintText: '请输入金额', + hintText: '請輸入金額', hintStyle: AppTextStyles.numberMedium(context).copyWith( fontWeight: FontWeight.w400, color: colorScheme.onSurfaceVariant.withOpacity(0.5), @@ -94,7 +94,7 @@ class _AmountInputState extends State { Icon(Icons.error_outline, size: 13, color: warningColor), SizedBox(width: AppSpacing.xs), Text( - '超出可用USDT余额', + '超出可用USDT餘額', style: AppTextStyles.bodySmall(context).copyWith( color: warningColor, ), diff --git a/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart b/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart index 9c6c47a..4eafb40 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/coin_avatar.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; -/// 币种头像组件 +/// 幣種頭像組件 /// -/// 显示币种图标或首字母的圆形头像,带主题色边框和背景。 +/// 顯示幣種圖標或首字母的圓形頭像,帶主題色邊框和背景。 class CoinAvatar extends StatelessWidget { final String? icon; const CoinAvatar({super.key, this.icon}); diff --git a/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart b/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart index d2b1087..4e7cc92 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/coin_selector.dart @@ -6,9 +6,9 @@ import '../../../../core/theme/app_theme_extension.dart'; import '../../../../data/models/coin.dart'; import 'coin_avatar.dart'; -/// 币种选择器组件 +/// 幣種選擇器組件 /// -/// 显示当前选中的币种交易对,点击弹出底部弹窗选择币种。 +/// 顯示當前選中的幣種交易對,點擊彈出底部彈窗選擇幣種。 class CoinSelector extends StatelessWidget { final Coin? selectedCoin; final List coins; @@ -38,7 +38,7 @@ class CoinSelector extends StatelessWidget { child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - // 币种信息:交易对 + 名称 + // 幣種信息:交易對 + 名稱 Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, @@ -46,19 +46,19 @@ class CoinSelector extends StatelessWidget { Text( selectedCoin != null ? '${selectedCoin!.code}/USDT' - : '选择币种', + : '選擇幣種', style: AppTextStyles.headlineLarge(context), ), const SizedBox(height: 2), Text( - selectedCoin?.name ?? '点击选择交易对', + selectedCoin?.name ?? '點擊選擇交易對', style: AppTextStyles.bodyMedium(context).copyWith( color: context.colors.onSurfaceVariant, ), ), ], ), - // 下拉箭头 + // 下拉箭頭 Icon(LucideIcons.chevronDown, size: 16, color: context.colors.onSurfaceVariant), ], @@ -83,7 +83,7 @@ class CoinSelector extends StatelessWidget { ), child: Column( children: [ - // 拖动指示器 + // 拖動指示器 Container( margin: EdgeInsets.only(top: AppSpacing.sm), width: 40, @@ -93,13 +93,13 @@ class CoinSelector extends StatelessWidget { borderRadius: BorderRadius.circular(AppRadius.sm), ), ), - // 标题栏 + // 標題欄 Padding( padding: EdgeInsets.all(AppSpacing.lg), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('选择币种', + Text('選擇幣種', style: AppTextStyles.headlineLarge(context)), GestureDetector( onTap: () => Navigator.of(ctx).pop(), @@ -110,7 +110,7 @@ class CoinSelector extends StatelessWidget { ), ), Divider(height: 1, color: ctx.colors.outlineVariant.withValues(alpha: 0.2)), - // 币种列表 + // 幣種列表 Expanded( child: ListView.builder( padding: EdgeInsets.symmetric(vertical: AppSpacing.sm), @@ -150,7 +150,7 @@ class CoinSelector extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 第一行:币种代码 + USDT + 价格 + 涨跌幅 + // 第一行:幣種代碼 + USDT + 價格 + 漲跌幅 Row( children: [ Text(coin.code, @@ -164,7 +164,7 @@ class CoinSelector extends StatelessWidget { Text('\$${coin.formattedPrice}', style: AppTextStyles.numberMedium(context)), SizedBox(width: AppSpacing.sm), - // 涨跌幅徽章 + // 漲跌幅徽章 Container( padding: EdgeInsets.symmetric(horizontal: 6, vertical: 2), decoration: BoxDecoration( @@ -185,7 +185,7 @@ class CoinSelector extends StatelessWidget { ], ), SizedBox(height: 3), - // 第二行:币种名称 + // 第二行:幣種名稱 Text(coin.name, style: AppTextStyles.bodyMedium(context).copyWith( color: context.colors.onSurfaceVariant, diff --git a/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart b/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart index 78cf355..c260e23 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/confirm_dialog.dart @@ -5,10 +5,10 @@ import '../../../../core/theme/app_theme_extension.dart'; import '../../../components/glass_panel.dart'; import '../../../components/neon_glow.dart'; -/// 交易确认对话框 +/// 交易確認對話框 /// -/// 显示交易详情(交易对、委托价格、交易金额、交易数量), -/// 用户确认后执行交易。 +/// 顯示交易詳情(交易對、委託價格、交易金額、交易數量), +/// 用戶確認後執行交易。 class ConfirmDialog extends StatelessWidget { final bool isBuy; final String coinCode; @@ -42,19 +42,19 @@ class ConfirmDialog extends StatelessWidget { children: [ Center( child: Text( - '确认${isBuy ? '买入' : '卖出'}', + '確認${isBuy ? '買入' : '賣出'}', style: AppTextStyles.headlineLarge(context), ), ), SizedBox(height: AppSpacing.lg), - _dialogRow(context, '交易对', '$coinCode/USDT'), + _dialogRow(context, '交易對', '$coinCode/USDT'), SizedBox(height: AppSpacing.sm), - _dialogRow(context, '委托价格', '$price USDT'), + _dialogRow(context, '委託價格', '$price USDT'), SizedBox(height: AppSpacing.sm), - _dialogRow(context, '交易金额', '$amount USDT', + _dialogRow(context, '交易金額', '$amount USDT', valueColor: actionColor), SizedBox(height: AppSpacing.sm), - _dialogRow(context, '交易数量', '$quantity $coinCode'), + _dialogRow(context, '交易數量', '$quantity $coinCode'), SizedBox(height: AppSpacing.lg), Row( children: [ @@ -70,7 +70,7 @@ class ConfirmDialog extends StatelessWidget { SizedBox(width: AppSpacing.sm), Expanded( child: NeonButton( - text: '确认${isBuy ? '买入' : '卖出'}', + text: '確認${isBuy ? '買入' : '賣出'}', type: isBuy ? NeonButtonType.tertiary : NeonButtonType.error, onPressed: () => Navigator.of(context).pop(true), height: 44, diff --git a/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart b/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart index 9ed25a3..43e9f34 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/placeholder_card.dart @@ -3,9 +3,9 @@ import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_theme_extension.dart'; -/// 占位卡片组件 +/// 佔位卡片組件 /// -/// 当未选择币种时显示的占位提示卡片。 +/// 當未選擇幣種時顯示的佔位提示卡片。 class PlaceholderCard extends StatelessWidget { final String message; const PlaceholderCard({ diff --git a/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart b/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart index 52a6615..0d19d2e 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/price_card.dart @@ -4,10 +4,10 @@ import '../../../../core/theme/app_theme.dart'; import '../../../../core/theme/app_theme_extension.dart'; import '../../../../data/models/coin.dart'; -/// 价格卡片组件 +/// 價格卡片組件 /// -/// 显示当前币种价格和 24h 涨跌幅。 -/// 布局:大号价格(32px bold) + 涨跌幅徽章(圆角sm,涨绿背景) + "24h 变化" 副标题。 +/// 顯示當前幣種價格和 24h 漲跌幅。 +/// 佈局:大號價格(32px bold) + 漲跌幅徽章(圓角sm,漲綠背景) + "24h 變化" 副標題。 class PriceCard extends StatelessWidget { final Coin coin; const PriceCard({super.key, required this.coin}); @@ -34,7 +34,7 @@ class PriceCard extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 价格行:大号价格 + 涨跌幅徽章 + // 價格行:大號價格 + 漲跌幅徽章 Row( children: [ Text( @@ -42,10 +42,10 @@ class PriceCard extends StatelessWidget { style: AppTextStyles.numberLarge(context).copyWith(fontSize: 32), ), const SizedBox(width: AppSpacing.sm), - // 涨跌幅徽章 - 圆角sm,涨绿背景 + // 漲跌幅徽章 - 圓角sm,漲綠背景 Container( padding: const EdgeInsets.symmetric( - horizontal: 8, vertical: 4), // 调整 padding + horizontal: 8, vertical: 4), // 調整 padding decoration: BoxDecoration( color: changeBgColor, borderRadius: BorderRadius.circular(AppRadius.sm), @@ -61,9 +61,9 @@ class PriceCard extends StatelessWidget { ], ), const SizedBox(height: AppSpacing.sm), - // 副标题 + // 副標題 Text( - '24h 变化', + '24h 變化', style: AppTextStyles.bodySmall(context), ), ], diff --git a/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart b/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart index 17135b3..139bae3 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/trade_button.dart @@ -3,9 +3,9 @@ import '../../../../core/theme/app_color_scheme.dart'; import '../../../../core/theme/app_spacing.dart'; import '../../../../core/theme/app_theme.dart'; -/// 交易按钮组件 +/// 交易按鈕組件 /// -/// CTA 买入/卖出按钮。profit-green底 / sell-red底,圆角lg,高48,买入白字/卖出红字16px bold。 +/// CTA 買入/賣出按鈕。profit-green底 / sell-red底,圓角lg,高48,買入白字/賣出紅字16px bold。 class TradeButton extends StatelessWidget { final bool isBuy; final String? coinCode; @@ -27,7 +27,7 @@ class TradeButton extends StatelessWidget { final colorScheme = Theme.of(context).colorScheme; final fillColor = isBuy ? AppColorScheme.buyButtonFill : AppColorScheme.sellButtonFill; - // 买入按钮文字为白色,卖出按钮文字为红色 + // 買入按鈕文字為白色,賣出按鈕文字為紅色 final textColor = isBuy ? Colors.white : (enabled ? AppColorScheme.sellButtonFill : colorScheme.onSurface.withOpacity(0.3)); @@ -52,7 +52,7 @@ class TradeButton extends StatelessWidget { ), ) : Text( - '${isBuy ? '买入' : '卖出'} ${coinCode ?? ""}', + '${isBuy ? '買入' : '賣出'} ${coinCode ?? ""}', style: AppTextStyles.headlineLarge(context).copyWith( color: enabled ? textColor diff --git a/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart b/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart index 71aaaaf..3e8cb3d 100644 --- a/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart +++ b/flutter_monisuo/lib/ui/pages/trade/components/trade_form_card.dart @@ -6,10 +6,10 @@ import '../../../../core/theme/app_theme_extension.dart'; import '../../../../data/models/coin.dart'; import 'amount_input.dart'; -/// 交易表单卡片组件 +/// 交易表單卡片組件 /// -/// 包含买入/卖出切换、金额输入、可用余额、快捷比例按钮、计算数量行。 -/// card背景 + 圆角lg + border + padding:20 + gap:16 +/// 包含買入/賣出切換、金額輸入、可用餘額、快捷比例按鈕、計算數量行。 +/// card背景 + 圓角lg + border + padding:20 + gap:16 class TradeFormCard extends StatelessWidget { final int tradeType; final Coin? selectedCoin; @@ -43,7 +43,7 @@ class TradeFormCard extends StatelessWidget { ? context.appColors.up : context.appColors.down; - // 设计稿中 card 背景色 + // 設計稿中 card 背景色 final cardBgColor = context.appColors.surfaceCard; return Container( @@ -59,13 +59,13 @@ class TradeFormCard extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // ---- 买入/卖出切换 ---- - // 设计稿:ClipRRect + 圆角md,两等宽按钮 + // ---- 買入/賣出切換 ---- + // 設計稿:ClipRRect + 圓角md,兩等寬按鈕 ClipRRect( borderRadius: BorderRadius.circular(AppRadius.md), child: Row( children: [ - // 买入按钮 + // 買入按鈕 Expanded( child: GestureDetector( onTap: () => onTradeTypeChanged(0), @@ -84,7 +84,7 @@ class TradeFormCard extends StatelessWidget { ), child: Center( child: Text( - '买入', + '買入', style: AppTextStyles.headlineMedium(context).copyWith( color: isBuy ? Colors.white @@ -95,7 +95,7 @@ class TradeFormCard extends StatelessWidget { ), ), ), - // 卖出按钮 + // 賣出按鈕 Expanded( child: GestureDetector( onTap: () => onTradeTypeChanged(1), @@ -114,7 +114,7 @@ class TradeFormCard extends StatelessWidget { ), child: Center( child: Text( - '卖出', + '賣出', style: AppTextStyles.headlineMedium(context).copyWith( color: !isBuy ? Colors.white @@ -130,11 +130,11 @@ class TradeFormCard extends StatelessWidget { ), const SizedBox(height: AppSpacing.md + AppSpacing.sm), - // ---- 交易金额 label 行 ---- + // ---- 交易金額 label 行 ---- Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('交易金额', + Text('交易金額', style: AppTextStyles.bodyMedium(context).copyWith( color: context.colors.onSurfaceVariant, )), @@ -144,7 +144,7 @@ class TradeFormCard extends StatelessWidget { ), const SizedBox(height: AppSpacing.sm), - // ---- 金额输入框 ---- + // ---- 金額輸入框 ---- AmountInput( amountController: amountController, maxAmount: maxAmount, @@ -154,7 +154,7 @@ class TradeFormCard extends StatelessWidget { ), const SizedBox(height: AppSpacing.sm), - // ---- 可用余额 ---- + // ---- 可用餘額 ---- Text( isBuy ? '可用: $availableUsdt USDT' @@ -165,8 +165,8 @@ class TradeFormCard extends StatelessWidget { ), const SizedBox(height: AppSpacing.md), - // ---- 快捷比例按钮 25% 50% 75% 100% ---- - // 设计稿:gap:8,圆角sm,bg-tertiary,高32 + // ---- 快捷比例按鈕 25% 50% 75% 100% ---- + // 設計稿:gap:8,圓角sm,bg-tertiary,高32 Row( children: [ _buildPctButton(context, '25%', 0.25), @@ -180,11 +180,11 @@ class TradeFormCard extends StatelessWidget { ), const SizedBox(height: AppSpacing.md + AppSpacing.sm), - // ---- 计算数量行 ---- + // ---- 計算數量行 ---- Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text('交易数量', + Text('交易數量', style: AppTextStyles.bodyMedium(context).copyWith( color: context.colors.onSurfaceVariant, )), @@ -199,7 +199,7 @@ class TradeFormCard extends StatelessWidget { ); } - /// 百分比按钮 - 设计稿:圆角sm,bg-tertiary,高32 + /// 百分比按鈕 - 設計稿:圓角sm,bg-tertiary,高32 Widget _buildPctButton(BuildContext context, String label, double pct) { return Expanded( child: GestureDetector( @@ -207,7 +207,7 @@ class TradeFormCard extends StatelessWidget { child: Container( height: 32, decoration: BoxDecoration( - color: context.colors.surfaceContainerHighest.withOpacity(0.5), // 更柔和的颜色 + color: context.colors.surfaceContainerHighest.withOpacity(0.5), // 更柔和的顏色 borderRadius: BorderRadius.circular(AppRadius.sm), ), child: Center( diff --git a/flutter_monisuo/lib/ui/pages/trade/trade_page.dart b/flutter_monisuo/lib/ui/pages/trade/trade_page.dart index ee7ce49..899f323 100644 --- a/flutter_monisuo/lib/ui/pages/trade/trade_page.dart +++ b/flutter_monisuo/lib/ui/pages/trade/trade_page.dart @@ -15,14 +15,14 @@ import 'components/trade_form_card.dart'; import 'components/trade_button.dart'; import 'components/confirm_dialog.dart'; -/// 交易页面 +/// 交易頁面 /// -/// 设计稿 Trade 页面,布局结构: -/// - 币种选择器卡片(Coin Selector Card) -/// - 价格卡片(Price Card):大号价格 + 涨跌幅徽章 + 副标题 -/// - 买入/卖出切换(Buy/Sell Toggle) -/// - 交易表单卡片(Trade Form Card):金额输入 + 快捷比例 + 计算数量 -/// - CTA 买入/卖出按钮(Buy/Sell Button) +/// 設計稿 Trade 頁面,佈局結構: +/// - 幣種選擇器卡片(Coin Selector Card) +/// - 價格卡片(Price Card):大號價格 + 漲跌幅徽章 + 副標題 +/// - 買入/賣出切換(Buy/Sell Toggle) +/// - 交易表單卡片(Trade Form Card):金額輸入 + 快捷比例 + 計算數量 +/// - CTA 買入/賣出按鈕(Buy/Sell Button) class TradePage extends StatefulWidget { final String? initialCoinCode; @@ -34,7 +34,7 @@ class TradePage extends StatefulWidget { class _TradePageState extends State with AutomaticKeepAliveClientMixin { - int _tradeType = 0; // 0=买入, 1=卖出 + int _tradeType = 0; // 0=買入, 1=賣出 Coin? _selectedCoin; final _amountController = TextEditingController(); bool _isSubmitting = false; @@ -71,14 +71,14 @@ class _TradePageState extends State super.dispose(); } - /// 获取交易账户中 USDT 可用余额 + /// 獲取交易賬戶中 USDT 可用餘額 String get _availableUsdt { final holdings = context.read().holdings; final usdt = holdings.where((h) => h.coinCode == 'USDT').firstOrNull; return usdt?.quantity ?? '0'; } - /// 获取交易账户中当前币种的持仓数量 + /// 獲取交易賬戶中當前幣種的持倉數量 String get _availableCoinQty { if (_selectedCoin == null) return '0'; final holdings = context.read().holdings; @@ -88,7 +88,7 @@ class _TradePageState extends State return pos?.quantity ?? '0'; } - /// 计算可买入/卖出的最大 USDT 金额 + /// 計算可買入/賣出的最大 USDT 金額 String get _maxAmount { if (_selectedCoin == null) return '0'; final price = _selectedCoin!.price; @@ -102,7 +102,7 @@ class _TradePageState extends State } } - /// 计算数量 + /// 計算數量 String get _calculatedQuantity { final amount = double.tryParse(_amountController.text) ?? 0; final price = _selectedCoin?.price ?? 0; @@ -121,11 +121,11 @@ class _TradePageState extends State return SafeArea( child: SingleChildScrollView( padding: const EdgeInsets.fromLTRB( - AppSpacing.md, AppSpacing.md, AppSpacing.md, AppSpacing.xl + AppSpacing.sm, // 添加顶部间距 + AppSpacing.md, AppSpacing.md, AppSpacing.md, AppSpacing.xl + AppSpacing.sm, // 添加頂部間距 ), child: Column( children: [ - // 币种选择器卡片 + // 幣種選擇器卡片 CoinSelector( selectedCoin: _selectedCoin, coins: market.allCoins @@ -143,16 +143,16 @@ class _TradePageState extends State ), const SizedBox(height: AppSpacing.md), - // 价格卡片 + // 價格卡片 if (_selectedCoin != null) PriceCard(coin: _selectedCoin!) else PlaceholderCard( - message: '请先选择交易币种', + message: '請先選擇交易幣種', ), const SizedBox(height: AppSpacing.md), - // 交易表单卡片(内含买入/卖出切换 + 表单) + // 交易表單卡片(內含買入/賣出切換 + 表單) TradeFormCard( tradeType: _tradeType, selectedCoin: _selectedCoin, @@ -170,7 +170,7 @@ class _TradePageState extends State ), const SizedBox(height: AppSpacing.md), - // CTA 买入/卖出按钮 + // CTA 買入/賣出按鈕 SizedBox( width: double.infinity, height: 48, @@ -195,7 +195,7 @@ class _TradePageState extends State if (_selectedCoin == null) return false; final amount = double.tryParse(_amountController.text) ?? 0; if (amount <= 0) return false; - // 买入时校验不超过可用USDT + // 買入時校驗不超過可用USDT if (_tradeType == 0) { final available = double.tryParse(_availableUsdt) ?? 0; if (amount > available) return false; @@ -243,16 +243,16 @@ class _TradePageState extends State if (response.success) { _amountController.clear(); - // 刷新资产数据 + // 刷新資產數據 context.read().refreshAll(force: true); - _showResultDialog(true, '${isBuy ? '买入' : '卖出'}成功', + _showResultDialog(true, '${isBuy ? '買入' : '賣出'}成功', '$quantity $coinCode @ $price USDT'); } else { - _showResultDialog(false, '交易失败', response.message ?? '请稍后重试'); + _showResultDialog(false, '交易失敗', response.message ?? '請稍後重試'); } } catch (e) { if (mounted) { - _showResultDialog(false, '交易失败', e.toString()); + _showResultDialog(false, '交易失敗', e.toString()); } } finally { if (mounted) setState(() => _isSubmitting = false); @@ -279,7 +279,7 @@ class _TradePageState extends State description: Text(message), actions: [ ShadButton( - child: const Text('确定'), + child: const Text('確定'), onPressed: () => Navigator.of(ctx).pop(), ), ], diff --git a/flutter_monisuo/lib/ui/shared/modern_bottom_sheet.dart b/flutter_monisuo/lib/ui/shared/modern_bottom_sheet.dart index 3592f8e..7a87aa2 100644 --- a/flutter_monisuo/lib/ui/shared/modern_bottom_sheet.dart +++ b/flutter_monisuo/lib/ui/shared/modern_bottom_sheet.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import '../../core/theme/app_spacing.dart'; -/// 现代底部抽屉模板 - 基于 modernization-v2.md 规范 +/// 現代底部抽屜模板 - 基於 modernization-v2.md 規範 /// /// 使用方法: /// ```dart /// ModernBottomSheet.show( /// context: context, -/// title: '选择币种', +/// title: '選擇幣種', /// child: YourContentWidget(), /// ); /// ``` @@ -32,7 +32,7 @@ class ModernBottomSheet extends StatelessWidget { this.onClose, }); - /// 显示底部抽屉 + /// 顯示底部抽屜 static Future show({ required BuildContext context, String? title, @@ -62,7 +62,7 @@ class ModernBottomSheet extends StatelessWidget { ); } - /// 显示操作列表 + /// 顯示操作列表 static Future showActions({ required BuildContext context, String? title, @@ -75,12 +75,12 @@ class ModernBottomSheet extends StatelessWidget { ); } - /// 显示确认操作 + /// 顯示確認操作 static Future confirmAction({ required BuildContext context, required String title, String? description, - String confirmText = '确认', + String confirmText = '確認', String cancelText = '取消', bool isDestructive = false, }) async { @@ -150,12 +150,12 @@ class ModernBottomSheet extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 拖动指示器 + // 拖動指示器 if (showDragHandle) _buildDragHandle(theme), - // 标题行 + // 標題行 if (title != null || titleWidget != null || showCloseButton) _buildHeader(context, theme), - // 内容 + // 內容 child, ], ), @@ -183,7 +183,7 @@ class ModernBottomSheet extends StatelessWidget { padding: const EdgeInsets.only(bottom: AppSpacing.md), child: Row( children: [ - // 标题 + // 標題 Expanded( child: titleWidget ?? Text( title!, @@ -192,7 +192,7 @@ class ModernBottomSheet extends StatelessWidget { ), ), ), - // 关闭按钮 + // 關閉按鈕 if (showCloseButton) GestureDetector( onTap: () { @@ -238,7 +238,7 @@ class _ActionList extends StatelessWidget { } } -/// 操作项 +/// 操作項 class _ActionTile extends StatelessWidget { final ModernSheetAction action; @@ -289,7 +289,7 @@ class _ActionTile extends StatelessWidget { } } -/// 底部抽屉操作配置 +/// 底部抽屜操作配置 class ModernSheetAction { final String label; final IconData? icon; diff --git a/flutter_monisuo/lib/ui/shared/modern_dialog.dart b/flutter_monisuo/lib/ui/shared/modern_dialog.dart index fa5b6b9..8241456 100644 --- a/flutter_monisuo/lib/ui/shared/modern_dialog.dart +++ b/flutter_monisuo/lib/ui/shared/modern_dialog.dart @@ -2,17 +2,17 @@ import 'package:flutter/material.dart'; import 'package:shadcn_ui/shadcn_ui.dart'; import '../../core/theme/app_spacing.dart'; -/// 现代弹窗模板 - 基于 modernization-v2.md 规范 +/// 現代彈窗模板 - 基於 modernization-v2.md 規範 /// /// 使用方法: /// ```dart /// ModernDialog.show( /// context: context, -/// title: '确认操作', -/// description: '确定要执行此操作吗?', +/// title: '確認操作', +/// description: '確定要執行此操作嗎?', /// actions: [ /// ModernDialogAction(label: '取消', isDestructive: false), -/// ModernDialogAction(label: '确认', isPrimary: true), +/// ModernDialogAction(label: '確認', isPrimary: true), /// ], /// ); /// ``` @@ -34,7 +34,7 @@ class ModernDialog extends StatelessWidget { this.onClose, }); - /// 显示现代弹窗 + /// 顯示現代彈窗 static Future show({ required BuildContext context, String? title, @@ -57,12 +57,12 @@ class ModernDialog extends StatelessWidget { ); } - /// 显示确认弹窗 + /// 顯示確認彈窗 static Future confirm({ required BuildContext context, required String title, String? description, - String confirmText = '确认', + String confirmText = '確認', String cancelText = '取消', bool isDestructive = false, }) async { @@ -83,7 +83,7 @@ class ModernDialog extends StatelessWidget { return result ?? false; } - /// 显示信息弹窗 + /// 顯示信息彈窗 static Future info({ required BuildContext context, required String title, @@ -116,7 +116,7 @@ class ModernDialog extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - // 标题 + // 標題 if (titleWidget != null) titleWidget! else if (title != null) @@ -136,12 +136,12 @@ class ModernDialog extends StatelessWidget { ), const SizedBox(height: AppSpacing.md), ], - // 自定义内容 + // 自定義內容 if (content != null) ...[ content!, const SizedBox(height: AppSpacing.lg), ], - // 按钮 + // 按鈕 if (actions != null && actions!.isNotEmpty) Row( mainAxisAlignment: MainAxisAlignment.end, @@ -189,7 +189,7 @@ class ModernDialog extends StatelessWidget { } } -/// 弹窗按钮配置 +/// 彈窗按鈕配置 class ModernDialogAction { final String label; final dynamic returnValue; diff --git a/flutter_monisuo/lib/ui/shared/ui_constants.dart b/flutter_monisuo/lib/ui/shared/ui_constants.dart index 470ff03..a0e7492 100644 --- a/flutter_monisuo/lib/ui/shared/ui_constants.dart +++ b/flutter_monisuo/lib/ui/shared/ui_constants.dart @@ -1,94 +1,94 @@ -/// UI 常量整合导出 +/// UI 常量整合導出 /// -/// 统一导出所有设计 token,方便使用 +/// 統一導出所有設計 token,方便使用 /// 使用方式: import 'ui/shared/ui_constants.dart'; -// 导出颜色系统 +// 導出顏色系統 export '../../core/theme/app_color_scheme.dart'; -// 导出主题配置 (包含 AppTextStyles, AppSpacing, AppRadius, AppBreakpoints) +// 導出主題配置 (包含 AppTextStyles, AppSpacing, AppRadius, AppBreakpoints) export '../../core/theme/app_theme.dart'; -/// 表单验证器 +/// 表單驗證器 /// -/// 提供常用的表单验证方法 +/// 提供常用的表單驗證方法 class Validators { Validators._(); - /// 金额验证 + /// 金額驗證 static String? amount(String? value) { if (value == null || value.isEmpty) { - return '请输入金额'; + return '請輸入金額'; } final amount = double.tryParse(value); if (amount == null || amount <= 0) { - return '请输入有效金额'; + return '請輸入有效金額'; } return null; } - /// 价格验证 + /// 價格驗證 static String? price(String? value) { if (value == null || value.isEmpty) { - return '请输入价格'; + return '請輸入價格'; } final price = double.tryParse(value); if (price == null || price <= 0) { - return '请输入有效价格'; + return '請輸入有效價格'; } return null; } - /// 数量验证 + /// 數量驗證 static String? quantity(String? value) { if (value == null || value.isEmpty) { - return '请输入数量'; + return '請輸入數量'; } final quantity = double.tryParse(value); if (quantity == null || quantity <= 0) { - return '请输入有效数量'; + return '請輸入有效數量'; } return null; } - /// 必填字段验证 + /// 必填字段驗證 static String? required(String? value, String fieldName) { if (value == null || value.isEmpty) { - return '请输入$fieldName'; + return '請輸入$fieldName'; } return null; } - /// 用户名验证 + /// 用戶名驗證 static String? username(String? value) { if (value == null || value.isEmpty) { - return '请输入用户名'; + return '請輸入用戶名'; } if (value.length < 3) { - return '用户名至少 3 个字符'; + return '用戶名至少 3 個字符'; } return null; } - /// 密码验证 + /// 密碼驗證 static String? password(String? value) { if (value == null || value.isEmpty) { - return '请输入密码'; + return '請輸入密碼'; } if (value.length < 6) { - return '密码至少 6 个字符'; + return '密碼至少 6 個字符'; } return null; } - /// 邮箱验证 + /// 郵箱驗證 static String? email(String? value) { if (value == null || value.isEmpty) { - return '请输入邮箱'; + return '請輸入郵箱'; } final emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$'); if (!emailRegex.hasMatch(value)) { - return '请输入有效的邮箱地址'; + return '請輸入有效的郵箱地址'; } return null; } diff --git a/src/main/java/com/it/rattan/monisuo/controller/BonusController.java b/src/main/java/com/it/rattan/monisuo/controller/BonusController.java index 173fc1a..ad7c655 100644 --- a/src/main/java/com/it/rattan/monisuo/controller/BonusController.java +++ b/src/main/java/com/it/rattan/monisuo/controller/BonusController.java @@ -36,7 +36,7 @@ public class BonusController { /** * 领取奖励 - * body: { type: "new_user"|"referral", referredUserId?, milestone? } + * body: { type: "new_user"|"referral"|"indirect_referral", referredUserId?, milestone?, directReferralId? } */ @PostMapping("/claim") public Result> claim(@RequestBody Map params) { @@ -62,6 +62,18 @@ public class BonusController { Long referredUserId = Long.valueOf(referredUserIdObj.toString()); int milestone = Integer.parseInt(milestoneObj.toString()); return Result.success("领取成功", bonusService.claimReferralBonus(userId, referredUserId, milestone)); + } else if ("indirect_referral".equals(type)) { + Object directReferralIdObj = params.get("directReferralId"); + Object indirectReferredUserIdObj = params.get("indirectReferredUserId"); + Object milestoneObj = params.get("milestone"); + if (directReferralIdObj == null || indirectReferredUserIdObj == null || milestoneObj == null) { + return Result.fail("缺少参数"); + } + Long directReferralId = Long.valueOf(directReferralIdObj.toString()); + Long indirectReferredUserId = Long.valueOf(indirectReferredUserIdObj.toString()); + int milestone = Integer.parseInt(milestoneObj.toString()); + return Result.success("领取成功", bonusService.claimIndirectReferralBonus( + userId, directReferralId, indirectReferredUserId, milestone)); } else { return Result.fail("无效的奖励类型"); } diff --git a/src/main/java/com/it/rattan/monisuo/service/BonusService.java b/src/main/java/com/it/rattan/monisuo/service/BonusService.java index 12e24b0..f7a36b7 100644 --- a/src/main/java/com/it/rattan/monisuo/service/BonusService.java +++ b/src/main/java/com/it/rattan/monisuo/service/BonusService.java @@ -22,17 +22,20 @@ import java.util.*; * * 规则: * 1. 首充福利:新用户首次充值完成后可领取100u(一次性) - * 2. 推广奖励:被推广人累计充值每满1000u,推广人领100u(多次触发,最高8次/人) + * 2. 直接推广奖励:被推广人累计充值每满1000u,推广人领100u(最高8次/人) + * 3. 间接推广奖励:被推广人推广的用户充值每满1000u,推广人也领50u(最高8次/人间接上限) */ @Service public class BonusService { private static final BigDecimal BONUS_AMOUNT = new BigDecimal("100"); + private static final BigDecimal INDIRECT_BONUS_AMOUNT = new BigDecimal("50"); private static final BigDecimal MILESTONE_UNIT = new BigDecimal("1000"); private static final int MAX_MILESTONES = 8; private static final String NEW_USER_REMARK = "新人首充福利"; private static final String REFERRAL_REMARK_PREFIX = "邀请奖励-"; + private static final String INDIRECT_REFERRAL_REMARK_PREFIX = "间接推广奖励-"; @Autowired private AccountFundMapper accountFundMapper; @@ -114,15 +117,60 @@ public class BonusService { .count(); referralInfo.put("claimableCount", claimable); + // === 间接推广奖励 === + // 查询 B 推广的所有人(C, D, E...) + LambdaQueryWrapper indirectWrapper = new LambdaQueryWrapper<>(); + indirectWrapper.eq(User::getReferredBy, referred.getId()); + List indirectReferred = userMapper.selectList(indirectWrapper); + referralInfo.put("indirectRefCount", indirectReferred.size()); + + // 计算间接奖励里程碑 + int indirectClaimable = 0; + List> indirectMilestones = new ArrayList<>(); + for (User ir : indirectReferred) { + AccountFund irFund = assetService.getOrCreateFundAccount(ir.getId()); + BigDecimal irTotalDeposit = irFund.getTotalDeposit() != null + ? irFund.getTotalDeposit() : BigDecimal.ZERO; + int irEarned = irTotalDeposit.divide(MILESTONE_UNIT, 0, RoundingMode.DOWN).intValue(); + irEarned = Math.min(irEarned, MAX_MILESTONES); + + Set irClaimed = getIndirectClaimedMilestones(userId, referred.getId(), ir.getId()); + + for (int i = 1; i <= MAX_MILESTONES; i++) { + boolean earned = i <= irEarned; + boolean iClaimed = irClaimed.contains(i); + boolean isClaimable = earned && !iClaimed; + if (isClaimable) indirectClaimable++; + + Map im = new HashMap<>(); + im.put("indirectReferredUserId", ir.getId()); + im.put("indirectUsername", ir.getUsername()); + im.put("milestone", i); + im.put("amount", INDIRECT_BONUS_AMOUNT); + im.put("threshold", MILESTONE_UNIT.multiply(new BigDecimal(i))); + im.put("earned", earned); + im.put("claimed", iClaimed); + im.put("claimable", isClaimable); + indirectMilestones.add(im); + } + } + referralInfo.put("indirectClaimableCount", indirectClaimable); + referralInfo.put("indirectMilestones", indirectMilestones); + referralRewards.add(referralInfo); } result.put("referralRewards", referralRewards); - // 总可领取数量 + // 总可领取数量(直接 + 间接) int totalClaimable = (Boolean.TRUE.equals(newUserBonus.get("eligible")) ? 1 : 0); totalClaimable += referralRewards.stream() - .mapToInt(r -> r.get("claimableCount") instanceof Number - ? ((Number) r.get("claimableCount")).intValue() : 0) + .mapToInt(r -> { + int direct = r.get("claimableCount") instanceof Number + ? ((Number) r.get("claimableCount")).intValue() : 0; + int indirect = r.get("indirectClaimableCount") instanceof Number + ? ((Number) r.get("indirectClaimableCount")).intValue() : 0; + return direct + indirect; + }) .sum(); result.put("totalClaimable", totalClaimable); @@ -205,6 +253,66 @@ public class BonusService { return result; } + /** + * 领取间接推广奖励 + * A 推广 B,B 推广 C → A 领取 C 充值里程碑的间接奖励(50 USDT) + * + * @param referrerId A(领取人) + * @param directReferralId B(A 的直接推广人) + * @param indirectReferredUserId C(B 的推广人) + * @param milestone 里程碑序号 + */ + @Transactional(rollbackFor = Exception.class) + public Map claimIndirectReferralBonus(Long referrerId, Long directReferralId, + Long indirectReferredUserId, int milestone) { + if (milestone < 1 || milestone > MAX_MILESTONES) { + throw new RuntimeException("无效的里程碑"); + } + + // 验证推广链:A→B→C + User directReferral = userMapper.selectById(directReferralId); + if (directReferral == null || !referrerId.equals(directReferral.getReferredBy())) { + throw new RuntimeException("直接推广关系不存在"); + } + + User indirectReferred = userMapper.selectById(indirectReferredUserId); + if (indirectReferred == null || !directReferralId.equals(indirectReferred.getReferredBy())) { + throw new RuntimeException("间接推广关系不存在"); + } + + // 检查里程碑是否已达到 + AccountFund irFund = assetService.getOrCreateFundAccount(indirectReferredUserId); + BigDecimal irTotalDeposit = irFund.getTotalDeposit() != null + ? irFund.getTotalDeposit() : BigDecimal.ZERO; + int earnedMilestones = irTotalDeposit.divide(MILESTONE_UNIT, 0, RoundingMode.DOWN).intValue(); + if (milestone > earnedMilestones) { + throw new RuntimeException("该里程碑尚未达到"); + } + + // 检查是否已领取 + String remark = INDIRECT_REFERRAL_REMARK_PREFIX + directReferralId + "-" + indirectReferredUserId + "-" + milestone; + if (hasClaimedByRemark(referrerId, remark)) { + throw new RuntimeException("该间接奖励已领取"); + } + + // 发放奖励 + AccountFund referrerFund = assetService.getOrCreateFundAccount(referrerId); + BigDecimal balanceBefore = referrerFund.getBalance(); + BigDecimal balanceAfter = balanceBefore.add(INDIRECT_BONUS_AMOUNT); + + updateFundBalance(referrerFund, balanceAfter); + assetService.createFlow(referrerId, 1, INDIRECT_BONUS_AMOUNT, balanceBefore, balanceAfter, + "USDT", null, remark); + + Map result = new HashMap<>(); + result.put("amount", INDIRECT_BONUS_AMOUNT); + result.put("balance", balanceAfter); + result.put("directReferralId", directReferralId); + result.put("indirectReferredUserId", indirectReferredUserId); + result.put("milestone", milestone); + return result; + } + /** * 更新资金账户余额 */ @@ -250,4 +358,28 @@ public class BonusService { } return milestones; } + + /** + * 获取已领取的间接推广里程碑集合 + */ + private Set getIndirectClaimedMilestones(Long referrerId, Long directReferralId, Long indirectReferredUserId) { + String prefix = INDIRECT_REFERRAL_REMARK_PREFIX + directReferralId + "-" + indirectReferredUserId + "-"; + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(AccountFlow::getUserId, referrerId) + .likeRight(AccountFlow::getRemark, prefix); + List flows = accountFlowMapper.selectList(wrapper); + + Set milestones = new HashSet<>(); + for (AccountFlow flow : flows) { + String remark = flow.getRemark(); + if (remark != null && remark.startsWith(prefix)) { + try { + int m = Integer.parseInt(remark.substring(prefix.length())); + milestones.add(m); + } catch (NumberFormatException ignored) { + } + } + } + return milestones; + } }