asset_repository.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import 'package:flutter_riverpod/flutter_riverpod.dart';
  2. import '../../core/network/dio_client.dart';
  3. import '../models/asset/wallet_overview.dart';
  4. import '../services/asset_service.dart';
  5. /// 资产数据仓库(SSOT)
  6. class AssetRepository {
  7. AssetRepository(this._service);
  8. final AssetService _service;
  9. // 内存缓存
  10. List<WalletOverview>? _cachedWalletOverview;
  11. DateTime? _lastFetched;
  12. static const _cacheDuration = Duration(seconds: 30);
  13. bool get _isCacheValid =>
  14. _lastFetched != null &&
  15. DateTime.now().difference(_lastFetched!) < _cacheDuration;
  16. /// 获取账户总览
  17. Future<List<WalletOverview>> getWalletOverview({
  18. bool forceRefresh = false,
  19. }) async {
  20. if (!forceRefresh && _isCacheValid && _cachedWalletOverview != null) {
  21. return _cachedWalletOverview!;
  22. }
  23. _cachedWalletOverview = await _service.getWalletOverview();
  24. _lastFetched = DateTime.now();
  25. return _cachedWalletOverview!;
  26. }
  27. /// 清除缓存
  28. void clearCache() {
  29. _cachedWalletOverview = null;
  30. _lastFetched = null;
  31. }
  32. }
  33. /// AssetRepository Provider
  34. final assetRepositoryProvider = Provider<AssetRepository>((ref) {
  35. final dio = ref.watch(dioClientProvider);
  36. return AssetRepository(AssetService(dio));
  37. });