@@ -4,9 +4,8 @@ import 'package:data_repository/data_repository.dart';
44import 'package:flex_color_scheme/flex_color_scheme.dart' ;
55import 'package:flutter/material.dart' ;
66import 'package:flutter_bloc/flutter_bloc.dart' ;
7- import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_navigator_observer.dart' ;
87import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_service.dart' ;
9- import 'package:flutter_news_app_mobile_client_full_source_code/ads/models/ad_theme_style .dart' ;
8+ import 'package:flutter_news_app_mobile_client_full_source_code/ads/interstitial_ad_manager .dart' ;
109import 'package:flutter_news_app_mobile_client_full_source_code/app/bloc/app_bloc.dart' ;
1110import 'package:flutter_news_app_mobile_client_full_source_code/app/config/app_environment.dart' ;
1211import 'package:flutter_news_app_mobile_client_full_source_code/app/services/app_status_service.dart' ;
@@ -29,30 +28,32 @@ class App extends StatelessWidget {
2928 required DataRepository <Source > sourcesRepository,
3029 required DataRepository <UserAppSettings > userAppSettingsRepository,
3130 required DataRepository <UserContentPreferences >
32- userContentPreferencesRepository,
31+ userContentPreferencesRepository,
3332 required DataRepository <RemoteConfig > remoteConfigRepository,
3433 required DataRepository <User > userRepository,
3534 required KVStorageService kvStorageService,
3635 required AppEnvironment environment,
3736 required AdService adService,
3837 required DataRepository <LocalAd > localAdRepository,
38+ required GlobalKey <NavigatorState > navigatorKey,
3939 this .demoDataMigrationService,
4040 this .demoDataInitializerService,
4141 this .initialUser,
4242 super .key,
43- }) : _authenticationRepository = authenticationRepository,
44- _headlinesRepository = headlinesRepository,
45- _topicsRepository = topicsRepository,
46- _countriesRepository = countriesRepository,
47- _sourcesRepository = sourcesRepository,
48- _userAppSettingsRepository = userAppSettingsRepository,
49- _userContentPreferencesRepository = userContentPreferencesRepository,
50- _appConfigRepository = remoteConfigRepository,
51- _userRepository = userRepository,
52- _kvStorageService = kvStorageService,
53- _environment = environment,
54- _adService = adService,
55- _localAdRepository = localAdRepository;
43+ }) : _authenticationRepository = authenticationRepository,
44+ _headlinesRepository = headlinesRepository,
45+ _topicsRepository = topicsRepository,
46+ _countriesRepository = countriesRepository,
47+ _sourcesRepository = sourcesRepository,
48+ _userAppSettingsRepository = userAppSettingsRepository,
49+ _userContentPreferencesRepository = userContentPreferencesRepository,
50+ _appConfigRepository = remoteConfigRepository,
51+ _userRepository = userRepository,
52+ _kvStorageService = kvStorageService,
53+ _environment = environment,
54+ _adService = adService,
55+ _localAdRepository = localAdRepository,
56+ _navigatorKey = navigatorKey;
5657
5758 final AuthRepository _authenticationRepository;
5859 final DataRepository <Headline > _headlinesRepository;
@@ -61,13 +62,14 @@ class App extends StatelessWidget {
6162 final DataRepository <Source > _sourcesRepository;
6263 final DataRepository <UserAppSettings > _userAppSettingsRepository;
6364 final DataRepository <UserContentPreferences >
64- _userContentPreferencesRepository;
65+ _userContentPreferencesRepository;
6566 final DataRepository <RemoteConfig > _appConfigRepository;
6667 final DataRepository <User > _userRepository;
6768 final KVStorageService _kvStorageService;
6869 final AppEnvironment _environment;
6970 final AdService _adService;
7071 final DataRepository <LocalAd > _localAdRepository;
72+ final GlobalKey <NavigatorState > _navigatorKey;
7173 final DemoDataMigrationService ? demoDataMigrationService;
7274 final DemoDataInitializerService ? demoDataInitializerService;
7375 final User ? initialUser;
@@ -88,21 +90,30 @@ class App extends StatelessWidget {
8890 RepositoryProvider .value (value: _kvStorageService),
8991 RepositoryProvider .value (value: _adService),
9092 RepositoryProvider .value (value: _localAdRepository),
93+ // Provide the InterstitialAdManager as a RepositoryProvider
94+ RepositoryProvider (
95+ create: (context) => InterstitialAdManager (
96+ appBloc: context.read <AppBloc >(),
97+ adService: context.read <AdService >(),
98+ ),
99+ lazy: false , // Ensure it's created immediately
100+ ),
91101 ],
92102 child: MultiBlocProvider (
93103 providers: [
94104 BlocProvider (
95105 create: (context) => AppBloc (
96106 authenticationRepository: context.read <AuthRepository >(),
97- userAppSettingsRepository: context
98- .read <DataRepository <UserAppSettings >>(),
107+ userAppSettingsRepository:
108+ context .read <DataRepository <UserAppSettings >>(),
99109 appConfigRepository: context.read <DataRepository <RemoteConfig >>(),
100110 userRepository: context.read <DataRepository <User >>(),
101111 environment: _environment,
102112 demoDataMigrationService: demoDataMigrationService,
103113 demoDataInitializerService: demoDataInitializerService,
104114 initialUser: initialUser,
105115 adService: context.read <AdService >(),
116+ navigatorKey: _navigatorKey, // Pass navigatorKey to AppBloc
106117 ),
107118 ),
108119 BlocProvider (
@@ -124,6 +135,7 @@ class App extends StatelessWidget {
124135 environment: _environment,
125136 adService: _adService,
126137 localAdRepository: _localAdRepository,
138+ navigatorKey: _navigatorKey, // Pass navigatorKey to _AppView
127139 ),
128140 ),
129141 );
@@ -144,6 +156,7 @@ class _AppView extends StatefulWidget {
144156 required this .environment,
145157 required this .adService,
146158 required this .localAdRepository,
159+ required this .navigatorKey,
147160 });
148161
149162 final AuthRepository authenticationRepository;
@@ -158,19 +171,16 @@ class _AppView extends StatefulWidget {
158171 final AppEnvironment environment;
159172 final AdService adService;
160173 final DataRepository <LocalAd > localAdRepository;
174+ final GlobalKey <NavigatorState > navigatorKey;
161175
162176 @override
163177 State <_AppView > createState () => _AppViewState ();
164178}
165179
166180class _AppViewState extends State <_AppView > {
167181 late final GoRouter _router;
168- // Standard notifier that GoRouter listens to.
169182 late final ValueNotifier <AppStatus > _statusNotifier;
170- // The service responsible for automated status checks.
171183 AppStatusService ? _appStatusService;
172- // The observer for handling interstitial ads on route changes.
173- AdNavigatorObserver ? _adNavigatorObserver;
174184
175185 @override
176186 void initState () {
@@ -188,16 +198,6 @@ class _AppViewState extends State<_AppView> {
188198 environment: widget.environment,
189199 );
190200
191- // Derive AdThemeStyle from the current theme.
192- final adThemeStyle = AdThemeStyle .fromTheme (Theme .of (context));
193-
194- // Initialize AdNavigatorObserver.
195- _adNavigatorObserver = AdNavigatorObserver (
196- appStateProvider: () => context.read <AppBloc >().state,
197- adService: widget.adService,
198- adThemeStyle: adThemeStyle,
199- );
200-
201201 _router = createRouter (
202202 authStatusNotifier: _statusNotifier,
203203 authenticationRepository: widget.authenticationRepository,
@@ -211,7 +211,7 @@ class _AppViewState extends State<_AppView> {
211211 userRepository: widget.userRepository,
212212 environment: widget.environment,
213213 adService: widget.adService,
214- adNavigatorObserver : _adNavigatorObserver ! , // Pass the observer
214+ navigatorKey : widget.navigatorKey,
215215 );
216216 }
217217
@@ -220,13 +220,11 @@ class _AppViewState extends State<_AppView> {
220220 _statusNotifier.dispose ();
221221 // Dispose the AppStatusService to cancel timers and remove observers.
222222 _appStatusService? .dispose ();
223- // AdNavigatorObserver does not need explicit dispose here as it's a NavigatorObserver
224- // and its internal resources are managed by the AdService/AdMob SDK.
223+ // Dispose the InterstitialAdManager
224+ context. read < InterstitialAdManager >(). dispose ();
225225 super .dispose ();
226226 }
227227
228- // Removed _initDynamicLinks and _handleDynamicLink methods
229-
230228 @override
231229 Widget build (BuildContext context) {
232230 // Wrap the part of the tree that needs to react to AppBloc state changes
0 commit comments