diff --git a/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart b/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart index ce795ed7..364ae3a1 100644 --- a/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart +++ b/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart @@ -1061,14 +1061,37 @@ class _TradingPageState extends ConsumerState { ); 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)); + } } diff --git a/frontend/mining-app/lib/presentation/providers/trading_providers.dart b/frontend/mining-app/lib/presentation/providers/trading_providers.dart index 2ae67cfb..a486300b 100644 --- a/frontend/mining-app/lib/presentation/providers/trading_providers.dart +++ b/frontend/mining-app/lib/presentation/providers/trading_providers.dart @@ -68,13 +68,13 @@ final klinesProvider = FutureProvider>((ref) async { ); }); -// 当前价格 Provider (5分钟缓存) +// 当前价格 Provider (15秒缓存 - 交易页面需要快速更新) final currentPriceProvider = FutureProvider((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((ref) async { ); }); -// 市场概览 Provider (5分钟缓存) +// 市场概览 Provider (30秒缓存 - 市场数据相对稳定) final marketOverviewProvider = FutureProvider((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((ref) async { ); }); -// 交易账户 Provider (带参数) +// 交易账户 Provider (15秒缓存 - 交易后快速更新资产) final tradingAccountProvider = FutureProvider.family( (ref, accountSequence) async { if (accountSequence.isEmpty) return null; @@ -111,7 +111,7 @@ final tradingAccountProvider = FutureProvider.family( 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( }, ); -// 订单列表 Provider +// 订单列表 Provider (10秒缓存 - 交易后快速看到结果) final ordersProvider = FutureProvider((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());