Skip to content

Commit 966603b

Browse files
committed
docs(README): update coverage badge and testing instructions
- Update coverage badge to XX% in README.md - Expand testing instructions to include very_good test command - Add note about updating coverage badge after tests pass
1 parent 7cf9fe1 commit 966603b

File tree

1 file changed

+37
-16
lines changed

1 file changed

+37
-16
lines changed

README.md

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Flutter News App Mobile Client Full Source Code
55

66
<p>
7-
<img src="https://img.shields.io/badge/coverage-0%25-green?style=for-the-badge" alt="coverage: 0%">
7+
<img src="https://img.shields.io/badge/coverage-XX%25-green?style=for-the-badge" alt="coverage: XX%">
88
<a href="https://flutter-news-app-full-source-code.github.io/flutter-news-app-mobile-client-full-source-code/"><img src="https://img.shields.io/badge/LIVE_DEMO-VIEW-orange?style=for-the-badge" alt="Live Demo: View"></a>
99
<a href="https://flutter-news-app-full-source-code.github.io/docs/mobile-client/local-setup/"><img src="https://img.shields.io/badge/DOCUMENTATION-READ-slategray?style=for-the-badge" alt="Documentation: Read"></a>
1010
<a href="LICENSE"><img src="https://img.shields.io/badge/TRIAL_LICENSE-VIEW_TERMS-blue?style=for-the-badge" alt="Trial License: View Terms"></a>
@@ -21,20 +21,34 @@ This app comes packed with all the features you need to launch a professional ne
2121

2222
#### 📰 **Dynamic & Engaging Headlines Feed**
2323
* Display news in a beautiful, performant, infinitely scrolling feed.
24-
* Strategically display in-feed messages to drive user actions. Show calls-to-action like 'Create an Account' to anonymous users or 'Upgrade to Premium' to authenticated users, all based on configurable rules.
24+
* **Customizable Display:** Users can personalize their feed by choosing headline density (compact, standard, comfortable) and image style (hidden, small thumbnail, large thumbnail).
25+
* **Rich In-Feed Decorators:** Beyond simple calls-to-action, the feed dynamically injects items like `CallToActionItem` (e.g., link account, upgrade, rate app, enable notifications) and `ContentCollectionItem` (e.g., suggested topics/sources to follow), all managed by configurable rules and user interaction status.
2526
> **Your Advantage:** You get a production-quality feed system instantly. Skip the months of complex UI work and state management. ⏱️
2627
2728
#### 🔍 **Advanced Content Filtering & Search**
28-
* Let users filter headlines by categories, sources, and countries.
29-
* Includes a dedicated search page to help users find specific content quickly.
29+
* **Comprehensive Filtering:** Let users filter headlines by `Topic`, `Source`, and `Country` using a dedicated filter interface.
30+
* **"Followed Items" Filter:** Users can instantly filter the feed to show only content from their followed topics, sources, and countries.
31+
* **Unified Search:** Includes a dedicated search page to help users find specific content quickly, with the ability to search across headlines, topics, sources, and countries.
3032
> **Your Advantage:** Give your users powerful content discovery tools that keep them engaged and coming back for more. 🎯
3133
32-
#### 💰 **Extensible Monetization with In-Feed Ads**
33-
* Built with a clean, provider-agnostic ad architecture that makes monetization simple and flexible.
34-
* Features a decoupled design, allowing easy integration and swapping of various ad networks (e.g., Google AdMob, Meta Audience Network) without rewriting core logic.
35-
* Comes with a ready-to-go Google AdMob integration for native ads in the feed.
36-
* **Theme-Aware Ads:** Native ads automatically adapt their appearance to match the user's selected theme, including light/dark modes and accent colors, ensuring a seamless and visually consistent user experience.
37-
* **Format-Aware Ads:** The ad system intelligently requests the appropriate native ad format (e.g., small or large template) based on the user's feed display preferences, ensuring ads always fit perfectly within the surrounding content.
34+
#### 💰 **Advanced Monetization Engine: Flexible & Remotely Controlled**
35+
Go beyond basic ad banners. This app includes a sophisticated, provider-agnostic monetization engine designed for flexibility, performance, and a seamless user experience.
36+
37+
* **Multi-Platform by Design:** The entire ad system is built on a provider-agnostic abstraction, giving you the freedom to choose your monetization strategy. It comes with pre-built, production-ready providers for:
38+
* **Google AdMob:** The industry standard, ready to go out of the box.
39+
* **Custom Ad Server:** Use the `LocalAdProvider` to serve ads directly from your own backend, giving you full control over your ad inventory and revenue.
40+
* **Demo Provider:** A built-in placeholder provider that makes development and testing a breeze, without needing live ad network credentials.
41+
42+
* **Seamless Integration, Not Intrusion:** Ads are designed to complement your content, not detract from it.
43+
* **Theme-Aware Styling:** Native ads automatically inherit their look and feel from the user's selected theme (light/dark mode, colors, fonts), making them feel like a natural part of the UI.
44+
* **Format-Aware Loading:** The system intelligently requests the right ad format (e.g., small or large templates) to match the user's feed layout preferences, ensuring a perfect fit every time.
45+
46+
* **Optimized for Performance:** A fast, fluid user experience is paramount.
47+
* **Intelligent Caching:** An `InlineAdCacheService` efficiently caches native and banner ads to ensure buttery-smooth scrolling in feeds, minimizing network requests and eliminating UI jank.
48+
* **Proactive Interstitial Loading:** A dedicated manager pre-loads full-screen interstitial ads in the background, so they are ready to be displayed instantly during navigation without any lag.
49+
50+
* **Powerful Remote Control:** All ad behavior is driven by the backend `RemoteConfig`. You can remotely control ad frequency, placement rules, and even switch the primary ad provider—all without shipping a new app update.
51+
3852
> **Your Advantage:** Start generating revenue from day one with a highly extensible and robust ad system that’s built to scale with your business. 💸
3953
4054
#### 🔐 **Robust User Authentication**
@@ -46,20 +60,24 @@ Secure and flexible authentication flows are built-in:
4660
4761
#### 🧑‍🎨 **Personalized User Accounts & Preferences**
4862
Users can tailor their experience:
49-
* **Content Preferences:** Follow/unfollow categories, sources, and countries.
63+
* **Content Preferences:** Follow/unfollow `Topic`s, `Source`s, and `Country`s.
5064
* **Saved Headlines:** Bookmark articles for easy access later.
65+
* **Decorator Interaction Tracking:** User interactions with in-feed decorators (e.g., "Link Account" prompts) are tracked and persisted, ensuring a personalized and non-repetitive experience.
5166
> **Your Advantage:** Built-in personalization features that drive user retention and create a sticky app experience. ❤️
5267
5368
#### ⚙️ **Customizable App Settings**
5469
Offer users control over their app experience:
55-
* **Appearance:** Light/Dark/System themes, accent colors (via FlexColorScheme), font choices, and text scaling.
56-
* **Feed Display:** Customize how headlines are presented.
70+
* **Appearance:** Configure base theme (Light/Dark/System), accent colors (via FlexColorScheme), font choices (family, size, weight).
71+
* **Feed Display:** Customize how headlines are presented, including `HeadlineDensity` and `HeadlineImageStyle`, and visibility of source/publish date.
72+
* **Language Selection:** Choose the application's display language.
5773
> **Your Advantage:** Deliver a premium, adaptable user experience that caters to individual needs without writing any code. 🔧
5874
5975
#### 📡 **Backend-Driven Behavior**
6076
The app is built to respond to commands from your backend API, allowing for dynamic control over the user experience:
77+
* **Remote Configuration:** Fetches global settings (`RemoteConfig`) from the backend, including ad configurations, user preference limits, and overall app status.
6178
* **Maintenance Mode:** Displays a full-screen "kill switch" page when the backend signals that the service is temporarily unavailable.
6279
* **Forced Updates:** Shows a non-dismissible "Update Required" screen when a new version is mandatory, guiding users to the app store.
80+
* **Dynamic Status Checks:** The `AppStatusService` proactively monitors the app's lifecycle and periodically checks for server-side status changes, ensuring real-time responsiveness.
6381
> **Your Advantage:** The client-side logic to handle critical operational states is already implemented. Your app can gracefully manage server downtime and enforce version updates without you needing to code these complex, full-screen takeover flows. 🛠️
6482
6583
#### 📱 **Adaptive UI for All Screens**
@@ -69,8 +87,9 @@ Built with `flutter_adaptive_scaffold`, the app offers responsive navigation and
6987
#### 🏗️ **Clean & Modern Architecture**
7088
Developed with best practices for a maintainable and scalable codebase:
7189
* **Flutter & Dart:** Cutting-edge mobile development.
72-
* **BLoC Pattern:** Predictable and robust state management.
90+
* **BLoC Pattern:** Predictable and robust state management, enhanced with `bloc_concurrency` transformers (droppable, restartable, sequential) for advanced event handling.
7391
* **GoRouter:** Well-structured and powerful navigation.
92+
* **KV Storage Service:** Utilizes `KVStorageService` for secure and efficient local key-value storage.
7493
> **Your Advantage:** The app is built on a clean, modern architecture that's easy to understand and maintain. It's solid and built to last. 📈
7594
7695
#### ⚙️ **Flexible Environment Configuration**
@@ -89,7 +108,7 @@ Get started for free and purchase when you're ready to launch!
89108

90109
* **TRY IT:** Download and explore the full source code under the PolyForm Free Trial [license](LICENSE). Perfect for evaluation.
91110
* **BUY IT:** One-time payment for a lifetime license to publish unlimited commercial apps.
92-
* **GET YOURS:** [**Purchase via GitHub Sponsors**](https://github.com/sponsors/flutter-news-app-full-source-code).
111+
* **GET YOURS:** [**Purchase via GitHub Sponsors**](https://github.sponsors/flutter-news-app-full-source-code).
93112

94113
> [!NOTE]
95114
> *A single purchase provides a commercial license for every repository within the [Flutter News App - Full Source Code Toolkit](https://github.com/flutter-news-app-full-source-code). No other purchases are needed..*
@@ -110,4 +129,6 @@ This project aims for high test coverage to ensure quality and reliability.
110129

111130
* Run tests with:
112131
```bash
113-
flutter test
132+
very_good test --min-coverage 90
133+
```
134+
* **Update Coverage Badge:** After `very_good test --min-coverage 90` passes, run `very_good test --min-coverage 100`. If it fails, get the integer percentage from the output (e.g., `97` from `97.55%`). If it passes, use `100`. Then, update `XX` in `![coverage: percentage](https://img.shields.io/badge/coverage-XX-green?style=for-the-badge)` in `README.md`.

0 commit comments

Comments
 (0)