import 'package:flutter/material.dart'; import '../data/models/account_models.dart'; import '../data/models/order_models.dart'; import '../data/services/asset_service.dart'; import '../data/services/fund_service.dart'; import '../core/network/dio_client.dart'; /// 资产状态管理 class AssetProvider extends ChangeNotifier { final AssetService _assetService; final FundService _fundService; AssetOverview? _overview; AccountFund? _fundAccount; List _tradeAccounts = []; List _flows = []; List _fundOrders = []; bool _isLoading = false; bool _isLoadingFlows = false; bool _isLoadingOrders = false; String? _error; AssetProvider(this._assetService, this._fundService); // Getters AssetOverview? get overview => _overview; AccountFund? get fundAccount => _fundAccount; List get tradeAccounts => _tradeAccounts; List get holdings => _tradeAccounts; List get flows => _flows; List get fundOrders => _fundOrders; bool get isLoading => _isLoading; bool get isLoadingFlows => _isLoadingFlows; bool get isLoadingOrders => _isLoadingOrders; String? get error => _error; /// 加载资产总览 Future loadOverview() async { _isLoading = true; _error = null; notifyListeners(); try { final response = await _assetService.getOverview(); if (response.success) { _overview = response.data; } else { _error = response.message; } } catch (e) { _error = '加载失败: $e'; } _isLoading = false; notifyListeners(); } /// 加载资金账户 Future loadFundAccount() async { try { final response = await _assetService.getFundAccount(); if (response.success) { _fundAccount = response.data; notifyListeners(); } } catch (_) { // 忽略错误 } } /// 加载交易账户 Future loadTradeAccount() async { try { final response = await _assetService.getTradeAccount(); if (response.success) { _tradeAccounts = response.data ?? []; notifyListeners(); } } catch (_) { // 忽略错误 } } /// 加载资金流水 Future loadFlows({int? flowType, int pageNum = 1}) async { _isLoadingFlows = true; notifyListeners(); try { final response = await _assetService.getFlow( flowType: flowType, pageNum: pageNum, ); if (response.success && response.data != null) { final list = response.data!['list'] as List?; _flows = list?.map((e) => AccountFlow.fromJson(e as Map)).toList() ?? []; } } catch (_) { // 忽略错误 } _isLoadingFlows = false; notifyListeners(); } /// 划转资金 Future> transfer({ required int direction, required String amount, }) async { try { final response = await _assetService.transfer( direction: direction, amount: amount, ); if (response.success) { // 刷新数据 await loadOverview(); await loadFundAccount(); await loadTradeAccount(); } return response; } catch (e) { return ApiResponse.fail('划转失败: $e'); } } /// 充值 - 返回订单详情包含钱包地址 Future>> deposit({required String amount, String? remark}) async { try { final response = await _fundService.deposit(amount: amount, remark: remark); if (response.success) { await loadOverview(); await loadFundAccount(); } return response; } catch (e) { return ApiResponse.fail('充值申请失败: $e'); } } /// 确认已打款 Future> confirmPay(String orderNo) async { try { final response = await _fundService.confirmPay(orderNo); if (response.success) { await loadFundOrders(); } return response; } catch (e) { return ApiResponse.fail('确认打款失败: $e'); } } /// 提现 Future>> withdraw({ required String amount, required String withdrawAddress, String? withdrawContact, String? remark, }) async { try { final response = await _fundService.withdraw( amount: amount, withdrawAddress: withdrawAddress, withdrawContact: withdrawContact, remark: remark, ); if (response.success) { await loadOverview(); await loadFundAccount(); } return response; } catch (e) { return ApiResponse.fail('提现申请失败: $e'); } } /// 加载充提订单 Future loadFundOrders({int? type, int pageNum = 1, int pageSize = 20}) async { _isLoadingOrders = true; notifyListeners(); try { final response = await _fundService.getOrders( type: type, pageNum: pageNum, pageSize: pageSize, ); if (response.success && response.data != null) { final list = response.data!['list'] as List?; _fundOrders = _fundService.parseOrderList(list); } } catch (_) { // 忽略错误 } _isLoadingOrders = false; notifyListeners(); } /// 取消订单 Future> cancelOrder(String orderNo) async { try { final response = await _fundService.cancelOrder(orderNo); if (response.success) { await loadFundOrders(); await loadFundAccount(); } return response; } catch (e) { return ApiResponse.fail('取消订单失败: $e'); } } /// 刷新所有资产数据 Future refreshAll() async { await Future.wait([ loadOverview(), loadFundAccount(), loadTradeAccount(), ]); } }