This commit is contained in:
sion
2026-04-07 01:05:05 +08:00
parent edad10ff06
commit 5ca1274607
83 changed files with 1561 additions and 1241 deletions

View File

@@ -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<void> 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<void> loadFundAccount({bool force = false}) async {
// 如果已经加载过且不是制刷新,则跳过
// 如果已經加載過且不是制刷新,則跳過
if (_fundAccountLoaded && !force && _fundAccount != null) {
return;
}
@@ -84,13 +84,13 @@ class AssetProvider extends ChangeNotifier {
notifyListeners();
}
} catch (_) {
// 忽略错误
// 忽略錯誤
}
}
/// 加交易账户
/// 加交易賬戶
Future<void> loadTradeAccount({bool force = false}) async {
// 如果已经加载过且不是制刷新,则跳过
// 如果已經加載過且不是制刷新,則跳過
if (_tradeAccountLoaded && !force && _tradeAccounts.isNotEmpty) {
return;
}
@@ -103,11 +103,11 @@ class AssetProvider extends ChangeNotifier {
notifyListeners();
}
} catch (_) {
// 忽略错误
// 忽略錯誤
}
}
/// 加载资金流水
/// 加載資金流水
Future<void> 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<String, dynamic>)).toList() ?? [];
}
} catch (_) {
// 忽略错误
// 忽略錯誤
}
_isLoadingFlows = false;
notifyListeners();
}
/// 划转资
/// 劃轉資
Future<ApiResponse<void>> 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<ApiResponse<Map<String, dynamic>>> 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<ApiResponse<void>> 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<ApiResponse<Map<String, dynamic>>> 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<void> 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<ApiResponse<void>> 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<List<String>> getWalletNetworks() async {
try {
final response = await _fundService.getWalletNetworks();
@@ -259,7 +259,7 @@ class AssetProvider extends ChangeNotifier {
}
}
/// 刷新所有资产数据
/// 刷新所有資產數據
Future<void> 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;

View File

@@ -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<void> _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<ApiResponse<User>> login(String username, String password) {
return _authenticate(() => _userService.login(username, password));
}
/// 注册(含身份证图片和可选推广码
/// 註冊(含身份證圖片和可選推廣碼
Future<ApiResponse<User>> register(
String username,
String password, {
@@ -63,7 +63,7 @@ class AuthProvider extends ChangeNotifier {
));
}
/// 统一认证处
/// 統一認證處
Future<ApiResponse<User>> _authenticate(
Future<ApiResponse<Map<String, dynamic>>> 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<User> _handleAuthSuccess(
Map<String, dynamic> data,
String? message,
@@ -107,17 +107,17 @@ class AuthProvider extends ChangeNotifier {
return _user != null
? ApiResponse.success(_user!, message)
: ApiResponse.fail('信息取失');
: ApiResponse.fail('信息取失');
}
/// 退出登
/// 退出登
Future<void> 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<void> refreshUserInfo() async {
if (!_isLoggedIn) return;
@@ -149,11 +149,11 @@ class AuthProvider extends ChangeNotifier {
notifyListeners();
}
} catch (_) {
// 忽略错误
// 忽略錯誤
}
}
/// 提交KYC实名认证(真实图片上
/// 提交KYC實名認證(真實圖片上
Future<ApiResponse<void>> 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');
}
}

View File

@@ -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<Coin> get featuredCoins =>
_allCoins.where((c) => c.code == 'BTC' || c.code == 'ETH').toList();
/// 排除 BTC、ETH、USDT 的代列表(下半展示)
/// 排除 BTC、ETH、USDT 的代列表(下半展示)
List<Coin> get otherCoins => _allCoins
.where((c) => !{'BTC', 'ETH', 'USDT'}.contains(c.code))
.toList();
/// 加载币种列表
/// 加載幣種列表
Future<void> 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 = [];

View File

@@ -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<void> init() async {
final prefs = await SharedPreferences.getInstance();
final modeString = prefs.getString(_themeModeKey);
@@ -32,14 +32,14 @@ class ThemeProvider extends ChangeNotifier {
}
}
/// 切换主题(浅色/深色)
/// 切換主題(淺色/深色)
Future<void> toggleTheme() async {
_themeMode = _themeMode == ThemeMode.light ? ThemeMode.dark : ThemeMode.light;
await _saveThemeMode();
notifyListeners();
}
/// 置主模式
/// 置主模式
Future<void> setThemeMode(ThemeMode mode) async {
if (_themeMode == mode) return;
_themeMode = mode;
@@ -47,7 +47,7 @@ class ThemeProvider extends ChangeNotifier {
notifyListeners();
}
/// 保存主题设置到本地存
/// 保存主題設置到本地存
Future<void> _saveThemeMode() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_themeModeKey, _themeMode.toString());