perf(frontend): 优化交易页面数据刷新策略
- 价格刷新: 5分钟 → 15秒 - 订单刷新: 2分钟 → 10秒 - 市场概览: 5分钟 → 30秒 - 交易账户: 2分钟 → 15秒 - 交易成功后立即刷新 + 2秒后再刷新 + 5秒后最终刷新 - 确保用户能快速看到做市商吃单后的成交状态 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
b1fedd417f
commit
5c633b9979
|
|
@ -1061,14 +1061,37 @@ class _TradingPageState extends ConsumerState<TradingPage> {
|
|||
);
|
||||
if (success) {
|
||||
_quantityController.clear();
|
||||
// 交易成功后刷新订单列表和资产
|
||||
ref.invalidate(ordersProvider);
|
||||
ref.invalidate(currentPriceProvider);
|
||||
ref.invalidate(marketOverviewProvider);
|
||||
// 刷新资产数据
|
||||
final user = ref.read(userNotifierProvider);
|
||||
ref.invalidate(accountAssetProvider(user.accountSequence ?? ''));
|
||||
// 交易成功后立即刷新
|
||||
_refreshAfterTrade();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// 交易成功后刷新数据
|
||||
/// 立即刷新一次,然后在2秒和5秒后再各刷新一次
|
||||
/// 确保能看到做市商处理后的最新状态
|
||||
void _refreshAfterTrade() {
|
||||
final user = ref.read(userNotifierProvider);
|
||||
final accountSeq = user.accountSequence ?? '';
|
||||
|
||||
// 立即刷新
|
||||
_doRefresh(accountSeq);
|
||||
|
||||
// 2秒后再刷新(做市商可能在1-4秒内吃单)
|
||||
Future.delayed(const Duration(seconds: 2), () {
|
||||
if (mounted) _doRefresh(accountSeq);
|
||||
});
|
||||
|
||||
// 5秒后最终刷新(确保看到最终状态)
|
||||
Future.delayed(const Duration(seconds: 5), () {
|
||||
if (mounted) _doRefresh(accountSeq);
|
||||
});
|
||||
}
|
||||
|
||||
void _doRefresh(String accountSeq) {
|
||||
ref.invalidate(ordersProvider);
|
||||
ref.invalidate(currentPriceProvider);
|
||||
ref.invalidate(marketOverviewProvider);
|
||||
ref.invalidate(accountAssetProvider(accountSeq));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,13 +68,13 @@ final klinesProvider = FutureProvider<List<Kline>>((ref) async {
|
|||
);
|
||||
});
|
||||
|
||||
// 当前价格 Provider (5分钟缓存)
|
||||
// 当前价格 Provider (15秒缓存 - 交易页面需要快速更新)
|
||||
final currentPriceProvider = FutureProvider<PriceInfo?>((ref) async {
|
||||
final repository = ref.watch(tradingRepositoryProvider);
|
||||
final result = await repository.getCurrentPrice();
|
||||
|
||||
ref.keepAlive();
|
||||
final timer = Timer(const Duration(minutes: 5), () {
|
||||
final timer = Timer(const Duration(seconds: 15), () {
|
||||
ref.invalidateSelf();
|
||||
});
|
||||
ref.onDispose(() => timer.cancel());
|
||||
|
|
@ -85,13 +85,13 @@ final currentPriceProvider = FutureProvider<PriceInfo?>((ref) async {
|
|||
);
|
||||
});
|
||||
|
||||
// 市场概览 Provider (5分钟缓存)
|
||||
// 市场概览 Provider (30秒缓存 - 市场数据相对稳定)
|
||||
final marketOverviewProvider = FutureProvider<MarketOverview?>((ref) async {
|
||||
final repository = ref.watch(tradingRepositoryProvider);
|
||||
final result = await repository.getMarketOverview();
|
||||
|
||||
ref.keepAlive();
|
||||
final timer = Timer(const Duration(minutes: 5), () {
|
||||
final timer = Timer(const Duration(seconds: 30), () {
|
||||
ref.invalidateSelf();
|
||||
});
|
||||
ref.onDispose(() => timer.cancel());
|
||||
|
|
@ -102,7 +102,7 @@ final marketOverviewProvider = FutureProvider<MarketOverview?>((ref) async {
|
|||
);
|
||||
});
|
||||
|
||||
// 交易账户 Provider (带参数)
|
||||
// 交易账户 Provider (15秒缓存 - 交易后快速更新资产)
|
||||
final tradingAccountProvider = FutureProvider.family<TradingAccount?, String>(
|
||||
(ref, accountSequence) async {
|
||||
if (accountSequence.isEmpty) return null;
|
||||
|
|
@ -111,7 +111,7 @@ final tradingAccountProvider = FutureProvider.family<TradingAccount?, String>(
|
|||
final result = await repository.getTradingAccount(accountSequence);
|
||||
|
||||
ref.keepAlive();
|
||||
final timer = Timer(const Duration(minutes: 2), () {
|
||||
final timer = Timer(const Duration(seconds: 15), () {
|
||||
ref.invalidateSelf();
|
||||
});
|
||||
ref.onDispose(() => timer.cancel());
|
||||
|
|
@ -123,13 +123,13 @@ final tradingAccountProvider = FutureProvider.family<TradingAccount?, String>(
|
|||
},
|
||||
);
|
||||
|
||||
// 订单列表 Provider
|
||||
// 订单列表 Provider (10秒缓存 - 交易后快速看到结果)
|
||||
final ordersProvider = FutureProvider<OrdersPageModel?>((ref) async {
|
||||
final repository = ref.watch(tradingRepositoryProvider);
|
||||
final result = await repository.getOrders(page: 1, pageSize: 10);
|
||||
|
||||
ref.keepAlive();
|
||||
final timer = Timer(const Duration(minutes: 2), () {
|
||||
final timer = Timer(const Duration(seconds: 10), () {
|
||||
ref.invalidateSelf();
|
||||
});
|
||||
ref.onDispose(() => timer.cancel());
|
||||
|
|
|
|||
Loading…
Reference in New Issue