import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../billing/billing_providers.dart'; import 'entitlement_coordinator.dart'; import 'entitlement_state.dart'; import 'entitlement_storage.dart'; import 'feature_access_service.dart'; /// Provider for the physical entitlement storage contract. /// Can be overridden in tests with [InMemoryEntitlementStorage]. final entitlementStorageProvider = Provider((ref) { return const SecureEntitlementStorage(); }); /// Provider for the [EntitlementCoordinator] which bridges store events to entitlement state. final entitlementCoordinatorProvider = ChangeNotifierProvider((ref) { final billing = ref.watch(billingServiceProvider); final storage = ref.watch(entitlementStorageProvider); final verifier = ref.watch(purchaseVerificationServiceProvider); final queue = ref.watch(verificationQueueProvider); return EntitlementCoordinator( billingService: billing, storage: storage, verificationService: verifier, verificationQueue: queue, ); }); /// Authoritative entitlement state provider. /// Follows the state published by [EntitlementCoordinator]. final entitlementProvider = Provider((ref) { final coordinator = ref.watch(entitlementCoordinatorProvider); return coordinator.state; }); /// Centralized provider for checking feature accessibility. /// Consumers watch this provider and call [FeatureAccessService.canAccess]. final featureAccessProvider = Provider((ref) { final state = ref.watch(entitlementProvider); return FeatureAccessService(state); });