feat: 优化
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../core/network/api_response.dart';
|
||||
import '../core/network/dio_client.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 {
|
||||
@@ -20,6 +21,11 @@ class AssetProvider extends ChangeNotifier {
|
||||
bool _isLoadingOrders = false;
|
||||
String? _error;
|
||||
|
||||
// 加载状态标记,防止重复加载
|
||||
bool _overviewLoaded = false;
|
||||
bool _fundAccountLoaded = false;
|
||||
bool _tradeAccountLoaded = false;
|
||||
|
||||
AssetProvider(this._assetService, this._fundService);
|
||||
|
||||
// Getters
|
||||
@@ -35,7 +41,12 @@ class AssetProvider extends ChangeNotifier {
|
||||
String? get error => _error;
|
||||
|
||||
/// 加载资产总览
|
||||
Future<void> loadOverview() async {
|
||||
Future<void> loadOverview({bool force = false}) async {
|
||||
// 如果已经加载过且不是强制刷新,则跳过
|
||||
if (_overviewLoaded && !force && _overview != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
_isLoading = true;
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
@@ -44,6 +55,7 @@ class AssetProvider extends ChangeNotifier {
|
||||
final response = await _assetService.getOverview();
|
||||
if (response.success) {
|
||||
_overview = response.data;
|
||||
_overviewLoaded = true;
|
||||
} else {
|
||||
_error = response.message;
|
||||
}
|
||||
@@ -56,11 +68,17 @@ class AssetProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// 加载资金账户
|
||||
Future<void> loadFundAccount() async {
|
||||
Future<void> loadFundAccount({bool force = false}) async {
|
||||
// 如果已经加载过且不是强制刷新,则跳过
|
||||
if (_fundAccountLoaded && !force && _fundAccount != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
final response = await _assetService.getFundAccount();
|
||||
if (response.success) {
|
||||
_fundAccount = response.data;
|
||||
_fundAccountLoaded = true;
|
||||
notifyListeners();
|
||||
}
|
||||
} catch (_) {
|
||||
@@ -69,11 +87,17 @@ class AssetProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// 加载交易账户
|
||||
Future<void> loadTradeAccount() async {
|
||||
Future<void> loadTradeAccount({bool force = false}) async {
|
||||
// 如果已经加载过且不是强制刷新,则跳过
|
||||
if (_tradeAccountLoaded && !force && _tradeAccounts.isNotEmpty) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
final response = await _assetService.getTradeAccount();
|
||||
if (response.success) {
|
||||
_tradeAccounts = response.data ?? [];
|
||||
_tradeAccountLoaded = true;
|
||||
notifyListeners();
|
||||
}
|
||||
} catch (_) {
|
||||
@@ -114,10 +138,10 @@ class AssetProvider extends ChangeNotifier {
|
||||
amount: amount,
|
||||
);
|
||||
if (response.success) {
|
||||
// 刷新数据
|
||||
await loadOverview();
|
||||
await loadFundAccount();
|
||||
await loadTradeAccount();
|
||||
// 强制刷新数据
|
||||
await loadOverview(force: true);
|
||||
await loadFundAccount(force: true);
|
||||
await loadTradeAccount(force: true);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
@@ -130,8 +154,8 @@ class AssetProvider extends ChangeNotifier {
|
||||
try {
|
||||
final response = await _fundService.deposit(amount: amount, remark: remark);
|
||||
if (response.success) {
|
||||
await loadOverview();
|
||||
await loadFundAccount();
|
||||
await loadOverview(force: true);
|
||||
await loadFundAccount(force: true);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
@@ -167,8 +191,8 @@ class AssetProvider extends ChangeNotifier {
|
||||
remark: remark,
|
||||
);
|
||||
if (response.success) {
|
||||
await loadOverview();
|
||||
await loadFundAccount();
|
||||
await loadOverview(force: true);
|
||||
await loadFundAccount(force: true);
|
||||
}
|
||||
return response;
|
||||
} catch (e) {
|
||||
@@ -214,11 +238,25 @@ class AssetProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// 刷新所有资产数据
|
||||
Future<void> refreshAll() async {
|
||||
Future<void> refreshAll({bool force = false}) async {
|
||||
await Future.wait([
|
||||
loadOverview(),
|
||||
loadFundAccount(),
|
||||
loadTradeAccount(),
|
||||
loadOverview(force: force),
|
||||
loadFundAccount(force: force),
|
||||
loadTradeAccount(force: force),
|
||||
]);
|
||||
}
|
||||
|
||||
/// 重置加载状态(用于退出登录时)
|
||||
void resetLoadState() {
|
||||
_overviewLoaded = false;
|
||||
_fundAccountLoaded = false;
|
||||
_tradeAccountLoaded = false;
|
||||
_overview = null;
|
||||
_fundAccount = null;
|
||||
_tradeAccounts = [];
|
||||
_flows = [];
|
||||
_fundOrders = [];
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import '../core/network/api_response.dart';
|
||||
import '../core/network/dio_client.dart';
|
||||
import '../core/storage/local_storage.dart';
|
||||
import '../data/models/user.dart';
|
||||
|
||||
@@ -12,6 +12,7 @@ class MarketProvider extends ChangeNotifier {
|
||||
String _searchKeyword = '';
|
||||
bool _isLoading = false;
|
||||
String? _error;
|
||||
bool _coinsLoaded = false; // 标记是否已加载
|
||||
|
||||
MarketProvider(this._marketService);
|
||||
|
||||
@@ -24,7 +25,12 @@ class MarketProvider extends ChangeNotifier {
|
||||
String get searchKeyword => _searchKeyword;
|
||||
|
||||
/// 加载币种列表
|
||||
Future<void> loadCoins() async {
|
||||
Future<void> loadCoins({bool force = false}) async {
|
||||
// 如果已经加载过且不是强制刷新,则跳过
|
||||
if (_coinsLoaded && !force && _allCoins.isNotEmpty) {
|
||||
return;
|
||||
}
|
||||
|
||||
_isLoading = true;
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
@@ -35,6 +41,7 @@ class MarketProvider extends ChangeNotifier {
|
||||
if (response.success) {
|
||||
_allCoins = response.data ?? [];
|
||||
_filterCoins();
|
||||
_coinsLoaded = true;
|
||||
} else {
|
||||
_error = response.message;
|
||||
}
|
||||
@@ -100,6 +107,15 @@ class MarketProvider extends ChangeNotifier {
|
||||
|
||||
/// 刷新
|
||||
Future<void> refresh() async {
|
||||
await loadCoins();
|
||||
await loadCoins(force: true);
|
||||
}
|
||||
|
||||
/// 重置加载状态(用于退出登录时)
|
||||
void resetLoadState() {
|
||||
_coinsLoaded = false;
|
||||
_allCoins = [];
|
||||
_filteredCoins = [];
|
||||
_error = null;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user