@@ -10,9 +10,10 @@ import 'package:data_repository/data_repository.dart';
1010import 'package:flutter/foundation.dart' ;
1111import 'package:flutter/material.dart' ;
1212import 'package:flutter_bloc/flutter_bloc.dart' ;
13+ import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_provider.dart' ;
1314import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_service.dart' ;
1415import '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/no_op_ad_provider .dart' ;
16+ import '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'
1819 as app_config;
@@ -23,6 +24,7 @@ import 'package:flutter_news_app_mobile_client_full_source_code/shared/data/clie
2324import 'package:http_client/http_client.dart' ;
2425import 'package:kv_storage_shared_preferences/kv_storage_shared_preferences.dart' ;
2526import 'package:logging/logging.dart' ;
27+ import 'package:logging/logging.dart' ;
2628import 'package:timeago/timeago.dart' as timeago;
2729import 'package:ui_kit/ui_kit.dart' ;
2830
@@ -48,12 +50,31 @@ Future<Widget> bootstrap(
4850 // Initialize AdProvider based on platform.
4951 // On web, use a No-Op provider to prevent MissingPluginException,
5052 // as Google Mobile Ads SDK does not support native ads on web.
51- final adProvider = kIsWeb
52- ? NoOpAdProvider (logger: logger)
53- : AdMobAdProvider (logger: logger);
53+ final Map <AdPlatformType , AdProvider > adProviders = {
54+ AdPlatformType .admob: AdMobAdProvider (logger: logger),
55+ AdPlatformType .local: LocalAdProvider (
56+ localAdRepository: DataRepository <LocalAd >(
57+ dataClient: appConfig.environment == app_config.AppEnvironment .demo
58+ ? DataInMemory <LocalAd >(
59+ toJson: (i) => LocalAd .toJson (i),
60+ getId: (i) => i.id,
61+ initialData: localAdsFixturesData,
62+ logger: logger,
63+ )
64+ : DataApi <LocalAd >(
65+ httpClient: httpClient! ,
66+ modelName: 'local_ad' ,
67+ fromJson: LocalAd .fromJson,
68+ toJson: (ad) => LocalAd .toJson (ad),
69+ logger: logger,
70+ ),
71+ ),
72+ logger: logger,
73+ ),
74+ };
5475
55- final adService = AdService (adProvider : adProvider , logger: logger);
56- await adService.initialize (); // Initialize the selected AdProvider early
76+ final adService = AdService (adProviders : adProviders , logger: logger);
77+ await adService.initialize (); // Initialize all selected AdProviders early
5778
5879 if (appConfig.environment == app_config.AppEnvironment .demo) {
5980 authClient = AuthInmemory ();
@@ -88,6 +109,7 @@ Future<Widget> bootstrap(
88109 DataClient <UserAppSettings > userAppSettingsClient;
89110 DataClient <RemoteConfig > remoteConfigClient;
90111 DataClient <User > userClient;
112+ DataClient <LocalAd > localAdClient; // Declare localAdClient
91113
92114 if (appConfig.environment == app_config.AppEnvironment .demo) {
93115 headlinesClient = DataInMemory <Headline >(
@@ -164,6 +186,12 @@ Future<Widget> bootstrap(
164186 getId: (i) => i.id,
165187 logger: logger,
166188 );
189+ localAdClient = DataInMemory <LocalAd >(
190+ toJson: (i) => LocalAd .toJson (i),
191+ getId: (i) => i.id,
192+ initialData: localAdsFixturesData,
193+ logger: logger,
194+ );
167195 } else if (appConfig.environment == app_config.AppEnvironment .development) {
168196 headlinesClient = DataApi <Headline >(
169197 httpClient: httpClient! ,
@@ -221,6 +249,13 @@ Future<Widget> bootstrap(
221249 toJson: (user) => user.toJson (),
222250 logger: logger,
223251 );
252+ localAdClient = DataApi <LocalAd >(
253+ httpClient: httpClient,
254+ modelName: 'local_ad' ,
255+ fromJson: LocalAd .fromJson,
256+ toJson: (ad) => LocalAd .toJson (ad),
257+ logger: logger,
258+ );
224259 } else {
225260 // Default to API clients for production
226261 headlinesClient = DataApi <Headline >(
@@ -279,11 +314,19 @@ Future<Widget> bootstrap(
279314 toJson: (user) => user.toJson (),
280315 logger: logger,
281316 );
317+ localAdClient = DataApi <LocalAd >(
318+ httpClient: httpClient,
319+ modelName: 'local_ad' ,
320+ fromJson: LocalAd .fromJson,
321+ toJson: (ad) => LocalAd .toJson (ad),
322+ logger: logger,
323+ );
282324 }
283325
284326 final headlinesRepository = DataRepository <Headline >(
285327 dataClient: headlinesClient,
286328 );
329+ final localAdRepository = DataRepository <LocalAd >(dataClient: localAdClient);
287330 final topicsRepository = DataRepository <Topic >(dataClient: topicsClient);
288331 final countriesRepository = DataRepository <Country >(
289332 dataClient: countriesClient,
@@ -336,5 +379,6 @@ Future<Widget> bootstrap(
336379 demoDataInitializerService: demoDataInitializerService,
337380 adService: adService,
338381 initialUser: initialUser,
382+ localAdRepository: localAdRepository,
339383 );
340384}
0 commit comments