Skip to content

Commit f67fa01

Browse files
committed
refactor(ads): replace AdNavigatorObserver with InterstitialAdManager
- Remove AdNavigatorObserver and related ad navigation logic - Integrate InterstitialAdManager for handling interstitial ads - Update App component to use InterstitialAdManager instead of AdNavigatorObserver - Adjust dependencies and routing to support new ad implementation
1 parent e44028e commit f67fa01

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

lib/app/view/app.dart

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ import 'package:data_repository/data_repository.dart';
44
import 'package:flex_color_scheme/flex_color_scheme.dart';
55
import 'package:flutter/material.dart';
66
import 'package:flutter_bloc/flutter_bloc.dart';
7-
import 'package:flutter_news_app_mobile_client_full_source_code/ads/ad_navigator_observer.dart';
87
import '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';
109
import 'package:flutter_news_app_mobile_client_full_source_code/app/bloc/app_bloc.dart';
1110
import 'package:flutter_news_app_mobile_client_full_source_code/app/config/app_environment.dart';
1211
import '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

166180
class _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

Comments
 (0)