import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../domain/entities/contribution.dart'; import '../../domain/entities/contribution_record.dart'; import '../../domain/usecases/contribution/get_user_contribution.dart'; import '../../domain/repositories/contribution_repository.dart'; import '../../core/di/injection.dart'; final getUserContributionUseCaseProvider = Provider((ref) { return getIt(); }); final contributionRepositoryProvider = Provider((ref) { return getIt(); }); final contributionProvider = FutureProvider.family( (ref, accountSequence) async { final useCase = ref.watch(getUserContributionUseCaseProvider); final result = await useCase(accountSequence); return result.fold( (failure) => throw Exception(failure.message), (contribution) => contribution, ); }, ); /// 贡献值记录请求参数 class ContributionRecordsParams { final String accountSequence; final int page; final int pageSize; const ContributionRecordsParams({ required this.accountSequence, this.page = 1, this.pageSize = 10, }); @override bool operator ==(Object other) => identical(this, other) || other is ContributionRecordsParams && runtimeType == other.runtimeType && accountSequence == other.accountSequence && page == other.page && pageSize == other.pageSize; @override int get hashCode => accountSequence.hashCode ^ page.hashCode ^ pageSize.hashCode; } /// 贡献值记录 Provider final contributionRecordsProvider = FutureProvider.family( (ref, params) async { final repository = ref.watch(contributionRepositoryProvider); final result = await repository.getContributionRecords( params.accountSequence, page: params.page, pageSize: params.pageSize, ); return result.fold( (failure) => throw Exception(failure.message), (records) => records, ); }, );