Skip to content

Commit df75125

Browse files
committed
refactor(ads): improve ad provider initialization and environment handling
- Add DemoAdProvider for simulating ad behavior in demo environment - Implement conditional ad provider instantiation based on environment - Simplify ad provider map creation - Update comments for better code clarity
1 parent 9075e9e commit df75125

File tree

1 file changed

+37
-22
lines changed

1 file changed

+37
-22
lines changed

lib/bootstrap.dart

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
1212
import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_provider.dart';
1313
import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_service.dart';
1414
import '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
1516
import 'package:flutter_news_app_mobile_client_full_source_code/ads/local_ad_provider.dart';
1617
import 'package:flutter_news_app_mobile_client_full_source_code/app/app.dart';
1718
import '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

Comments
 (0)