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:
hailin 2026-01-17 22:14:52 -08:00
parent b1fedd417f
commit 5c633b9979
2 changed files with 38 additions and 15 deletions

View File

@ -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();
}
}
}
///
/// 25
///
void _refreshAfterTrade() {
final user = ref.read(userNotifierProvider);
final accountSeq = user.accountSequence ?? '';
//
_doRefresh(accountSeq);
// 21-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));
}
}

View File

@ -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());