feat(ads): ref-constructed ad/consent/iap providers, single ownership source
This commit is contained in:
@@ -4,8 +4,11 @@ import '../data/content_repository.dart';
|
||||
import '../data/save_repository.dart';
|
||||
import '../data/streak.dart';
|
||||
import '../game/models/season.dart';
|
||||
import '../services/ad_service.dart';
|
||||
import '../services/analytics_service.dart';
|
||||
import '../services/audio_service.dart';
|
||||
import '../services/consent_service.dart';
|
||||
import '../services/iap_service.dart';
|
||||
import 'ads_notifier.dart';
|
||||
import 'endless_best_notifier.dart';
|
||||
import 'game_session_notifier.dart';
|
||||
@@ -75,6 +78,30 @@ final endlessBestProvider = NotifierProvider<EndlessBestNotifier, int>(
|
||||
final adsRemovedProvider =
|
||||
NotifierProvider<AdsRemovedNotifier, bool>(AdsRemovedNotifier.new);
|
||||
|
||||
/// Reads ownership live from [adsRemovedProvider]; a mid-session purchase
|
||||
/// takes effect on the next ad decision without re-wiring.
|
||||
final adServiceProvider = Provider<AdService>((ref) {
|
||||
final service = AdService(adsRemoved: () => ref.read(adsRemovedProvider));
|
||||
ref.onDispose(service.dispose);
|
||||
return service;
|
||||
});
|
||||
|
||||
final consentServiceProvider = Provider<ConsentService>(
|
||||
(ref) => ConsentService(ref.read(adServiceProvider)),
|
||||
);
|
||||
|
||||
/// A verified remove_ads purchase/restore grants the entitlement through the
|
||||
/// notifier (persists + flips state), which AdService and the banner observe.
|
||||
final iapServiceProvider = Provider<IapService>((ref) {
|
||||
final service = IapService(
|
||||
onEntitlementGranted: () =>
|
||||
ref.read(adsRemovedProvider.notifier).grant(),
|
||||
);
|
||||
ref.onDispose(service.dispose);
|
||||
service.initialize();
|
||||
return service;
|
||||
});
|
||||
|
||||
final analyticsProvider = Provider<AnalyticsService>(
|
||||
(ref) => AnalyticsService(DebugAnalyticsBackend()),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user