@@ -12,6 +12,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
1212import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_provider.dart' ;
1313import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_service.dart' ;
1414import 'package:flutter_news_app_mobile_client_full_source_code/ads/admob_ad_provider.dart' ;
15+ import 'package:flutter_news_app_mobile_client_full_source_code/ads/demo_ad_provider.dart' ; // Added DemoAdProvider
1516import 'package:flutter_news_app_mobile_client_full_source_code/ads/local_ad_provider.dart' ;
1617import 'package:flutter_news_app_mobile_client_full_source_code/app/app.dart' ;
1718import 'package:flutter_news_app_mobile_client_full_source_code/app/config/config.dart'
@@ -84,29 +85,43 @@ Future<Widget> bootstrap(
8485 // 3. Initialize AdProvider and AdService.
8586 // These now have a guaranteed valid httpClient (for DataApi-based LocalAdProvider)
8687 // or can proceed independently (AdMobAdProvider).
87- final adProviders = < AdPlatformType , AdProvider > {
88- AdPlatformType .admob: AdMobAdProvider (logger: logger),
89- AdPlatformType .local: LocalAdProvider (
90- localAdRepository: DataRepository <LocalAd >(
91- dataClient: appConfig.environment == app_config.AppEnvironment .demo
92- ? DataInMemory <LocalAd >(
93- toJson: LocalAd .toJson,
94- getId: (i) => i.id,
95- initialData: localAdsFixturesData,
96- logger: logger,
97- )
98- : DataApi <LocalAd >(
99- httpClient:
100- httpClient, // httpClient is now guaranteed to be non-null
101- modelName: 'local_ad' ,
102- fromJson: LocalAd .fromJson,
103- toJson: LocalAd .toJson,
104- logger: logger,
105- ),
88+ late final Map <AdPlatformType , AdProvider > adProviders;
89+
90+ // Conditionally instantiate ad providers based on the application environment.
91+ // This ensures that only the relevant ad providers are available for the
92+ // current environment, preventing unintended usage.
93+ if (appConfig.environment == app_config.AppEnvironment .demo) {
94+ final demoAdProvider = DemoAdProvider (logger: logger);
95+ adProviders = {
96+ // In the demo environment, all ad platform types map to the DemoAdProvider.
97+ // This simulates ad behavior without actual network calls.
98+ AdPlatformType .admob: demoAdProvider,
99+ AdPlatformType .local: demoAdProvider,
100+ AdPlatformType .demo: demoAdProvider,
101+ };
102+ } else {
103+ // For development and production environments, use real ad providers.
104+ adProviders = {
105+ // AdMob provider for Google Mobile Ads.
106+ AdPlatformType .admob: AdMobAdProvider (logger: logger),
107+ // Local ad provider for custom/backend-served ads.
108+ AdPlatformType .local: LocalAdProvider (
109+ localAdRepository: DataRepository <LocalAd >(
110+ dataClient: DataApi <LocalAd >(
111+ httpClient: httpClient,
112+ modelName: 'local_ad' ,
113+ fromJson: LocalAd .fromJson,
114+ toJson: LocalAd .toJson,
115+ logger: logger,
116+ ),
117+ ),
118+ logger: logger,
106119 ),
107- logger: logger,
108- ),
109- };
120+ // The demo ad platform is not available in non-demo environments.
121+ // If AdService attempts to access it, it will receive null, which is
122+ // handled by AdService's internal logic (logging a warning).
123+ };
124+ }
110125
111126 final adService = AdService (adProviders: adProviders, logger: logger);
112127 await adService.initialize ();
0 commit comments