import 'dart:async'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../domain/entities/share_account.dart'; import '../../domain/entities/global_state.dart'; import '../../domain/usecases/mining/get_share_account.dart'; import '../../domain/usecases/mining/get_global_state.dart'; import '../../core/di/injection.dart'; // Use Cases Providers final getShareAccountUseCaseProvider = Provider((ref) { return getIt(); }); final getGlobalStateUseCaseProvider = Provider((ref) { return getIt(); }); // State Providers - 使用 keepAlive 缓存数据,避免重复请求 final shareAccountProvider = FutureProvider.family( (ref, accountSequence) async { // 空字符串不请求 if (accountSequence.isEmpty) return null; final useCase = ref.watch(getShareAccountUseCaseProvider); final result = await useCase(accountSequence); // 保持 provider 活跃,避免每次 rebuild 都重新请求 ref.keepAlive(); // 5 分钟后自动失效,允许刷新 final timer = Timer(const Duration(minutes: 5), () { ref.invalidateSelf(); }); ref.onDispose(() => timer.cancel()); return result.fold( (failure) => throw Exception(failure.message), (account) => account, ); }, ); final globalStateProvider = FutureProvider((ref) async { final useCase = ref.watch(getGlobalStateUseCaseProvider); final result = await useCase(); // 保持 provider 活跃 ref.keepAlive(); // 5 分钟后自动失效 final timer = Timer(const Duration(minutes: 5), () { ref.invalidateSelf(); }); ref.onDispose(() => timer.cancel()); return result.fold( (failure) => throw Exception(failure.message), (state) => state, ); }); final currentPriceProvider = Provider((ref) { final globalState = ref.watch(globalStateProvider); return globalState.when( data: (state) => state?.currentPrice ?? '0', loading: () => '0', error: (_, __) => '0', ); });