Skip to content

Commit e2b6f41

Browse files
authored
Merge pull request #146 from flutter-news-app-full-source-code/feat/analytics-configuration-tab
Feat/analytics configuration tab
2 parents 63ce374 + 69ef8ab commit e2b6f41

18 files changed

+2562
-658
lines changed

README.md

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,16 @@ Directly manage all user-generated content from a centralized command center. Re
5959

6060

6161
<details>
62-
<summary><strong>⚙️ App Monetization & Remote Control</strong></summary>
63-
64-
### 💸 Centralized Monetization Engine
65-
Take direct control of your mobile app's revenue strategy. This integrated system allows you to manage your ad inventory and fine-tune display rules without ever touching the mobile app's code.
66-
- **Flexible Ad Provider Strategy:** Instantly switch the mobile app's primary ad source between industry-standard networks like Google AdMob for maximum control.
67-
- **Granular, Role-Based Rules:** Define precisely how and when ads are shown based on user subscription tiers (e.g., guest, standard, premium), optimizing both revenue and user experience.
68-
> **Your Advantage:** Deploy a powerful, backend-driven monetization strategy. A/B test ad providers and adjust revenue models on the fly to respond to market demands in real-time.
69-
70-
---
71-
72-
### 🚀 Real-Time Application Management
73-
Dynamically control the mobile app's behavior and operational state directly from the dashboard, eliminating the need for constant app store updates.
74-
- **Critical State Management:** Instantly activate a maintenance mode or enforce a mandatory app update for your users to handle operational issues or critical releases gracefully.
75-
- **Dynamic In-App Content:** Remotely manage the visibility and behavior of in-feed promotional prompts and user engagement elements.
76-
- **Tier-Based Feature Gating:** Define and enforce feature limits based on user roles, such as setting the maximum number of followed topics or saved headlines for different subscription levels.
77-
- **Full Community Feature Control:** Remotely enable or disable the entire user engagement system (reactions, comments), the content reporting feature, and the in-app review funnel. Fine-tune engagement modes and configure rules for when and how users are prompted for feedback.
78-
- **Global Notification Control:** Remotely enable or disable the entire push notification system, switch between providers (e.g., Firebase, OneSignal), and toggle specific delivery types like breaking news or daily digests.
79-
> **Your Advantage:** Gain unparalleled agility to manage your live application. Ensure service stability, drive user actions, and configure business rules instantly, all from a centralized control panel.
62+
<summary><strong>⚙️ Real-Time App Configuration & Remote Control</strong></summary>
63+
64+
### 🚀 Dynamic Application Control
65+
Dynamically control the mobile app's behavior, features, and operational state directly from the dashboard, eliminating the need for constant app store updates.
66+
- **App Monetization:** Take direct control of your mobile app's revenue. Remotely manage ad providers like Google AdMob and define granular, role-based display rules to optimize revenue and user experience.
67+
- **Feature Toggling:** Instantly enable or disable major features. Globally toggle the entire push notification system, the community engagement suite (reactions, comments), the content reporting feature, and the in-app review funnel.
68+
- **Operational Control:** Ensure stability and manage releases gracefully. Activate a maintenance mode or enforce a mandatory app update for all users directly from the dashboard.
69+
- **Content & Access Control:** Define and enforce feature limits based on user subscription tiers, such as setting the maximum number of saved articles. Remotely manage the visibility and behavior of in-feed promotional prompts.
70+
- **Analytics & Data Insights:** Gain critical insights by remotely configuring the analytics system. Enable or disable the entire system, switch between providers like Firebase or Mixpanel, and fine-tune event tracking and sampling rates to understand user behavior without deploying new app versions.
71+
> **Your Advantage:** Gain unparalleled agility to manage your live application. Ensure service stability, drive user actions, configure business rules, and adjust your data strategy instantly, all from a single, centralized control panel.
8072
8173
</details>
8274

lib/app/view/app.dart

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import 'package:flutter_news_app_web_dashboard_full_source_code/content_manageme
1818
import 'package:flutter_news_app_web_dashboard_full_source_code/content_management/bloc/sources_filter/sources_filter_bloc.dart';
1919
import 'package:flutter_news_app_web_dashboard_full_source_code/content_management/bloc/topics_filter/topics_filter_bloc.dart';
2020
import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/app_localizations.dart';
21-
import 'package:flutter_news_app_web_dashboard_full_source_code/overview/bloc/overview_bloc.dart';
21+
// import 'package:flutter_news_app_web_dashboard_full_source_code/overview/bloc/overview_bloc.dart';
2222
import 'package:flutter_news_app_web_dashboard_full_source_code/router/router.dart';
2323
import 'package:flutter_news_app_web_dashboard_full_source_code/shared/services/pending_deletions_service.dart';
2424
import 'package:flutter_news_app_web_dashboard_full_source_code/shared/services/pending_updates_service.dart';
@@ -40,7 +40,6 @@ class App extends StatelessWidget {
4040
required DataRepository<UserContentPreferences>
4141
userContentPreferencesRepository,
4242
required DataRepository<RemoteConfig> remoteConfigRepository,
43-
required DataRepository<DashboardSummary> dashboardSummaryRepository,
4443
required DataRepository<Country> countriesRepository,
4544
required DataRepository<Language> languagesRepository,
4645
required DataRepository<User> usersRepository,
@@ -59,7 +58,6 @@ class App extends StatelessWidget {
5958
_userContentPreferencesRepository = userContentPreferencesRepository,
6059
_remoteConfigRepository = remoteConfigRepository,
6160
_kvStorageService = storageService,
62-
_dashboardSummaryRepository = dashboardSummaryRepository,
6361
_countriesRepository = countriesRepository,
6462
_languagesRepository = languagesRepository,
6563
_usersRepository = usersRepository,
@@ -77,7 +75,6 @@ class App extends StatelessWidget {
7775
final DataRepository<UserContentPreferences>
7876
_userContentPreferencesRepository;
7977
final DataRepository<RemoteConfig> _remoteConfigRepository;
80-
final DataRepository<DashboardSummary> _dashboardSummaryRepository;
8178
final DataRepository<Country> _countriesRepository;
8279
final DataRepository<Language> _languagesRepository;
8380
final DataRepository<User> _usersRepository;
@@ -101,7 +98,6 @@ class App extends StatelessWidget {
10198
RepositoryProvider.value(value: _appSettingsRepository),
10299
RepositoryProvider.value(value: _userContentPreferencesRepository),
103100
RepositoryProvider.value(value: _remoteConfigRepository),
104-
RepositoryProvider.value(value: _dashboardSummaryRepository),
105101
RepositoryProvider.value(value: _countriesRepository),
106102
RepositoryProvider.value(value: _languagesRepository),
107103
RepositoryProvider.value(value: _usersRepository),
@@ -163,15 +159,13 @@ class App extends StatelessWidget {
163159
pendingDeletionsService: context.read<PendingDeletionsService>(),
164160
),
165161
),
166-
BlocProvider(
167-
create: (context) => OverviewBloc(
168-
dashboardSummaryRepository: context
169-
.read<DataRepository<DashboardSummary>>(),
170-
headlinesRepository: context.read<DataRepository<Headline>>(),
171-
topicsRepository: context.read<DataRepository<Topic>>(),
172-
sourcesRepository: context.read<DataRepository<Source>>(),
173-
),
174-
),
162+
// BlocProvider(
163+
// create: (context) => OverviewBloc(
164+
// headlinesRepository: context.read<DataRepository<Headline>>(),
165+
// topicsRepository: context.read<DataRepository<Topic>>(),
166+
// sourcesRepository: context.read<DataRepository<Source>>(),
167+
// ),
168+
// ),
175169
// The UserFilterBloc is provided here to be available for both the
176170
// UserManagementBloc and the UI components.
177171
BlocProvider(create: (_) => UserFilterBloc()),

0 commit comments

Comments
 (0)