VGVentures/news_toolkit
61.9
Adequate · 19 September 2026
18.8k
lines of production code
Dart
primary language
1
measurement over time
What this system is
This system is a comprehensive Flutter-based example application designed to demonstrate a complete news platform architecture, featuring a modular monorepo structure with distinct packages for UI, business logic, and data access. It integrates a Dart Frog backend API to serve structured news content and manages complex client-side features including multi-provider authentication, in-app subscriptions, ad consent, and analytics tracking. The project also includes a dedicated gallery for visualizing design tokens and components, alongside tooling to generate new project templates from this reference implementation.
Features
Abstracted deep-link handling with Firebase implementation
The deep\_link\_client package now provides an abstract DeepLinkClient interface and a DeepLinkService that manages link streams and initial link retrieval, allowing other implementations to be swapped easily. A concrete FirebaseDeepLinkClient implementation is included, wiring Firebase Dynamic Links into this interface, along with corresponding unit tests for both the service and the Firebase client.
_flutter\_news\_example/packages/deep\_link\client · high confidence
Add Spacing and Typography gallery pages
The gallery now includes dedicated pages for visualizing the design system's spacing tokens and typography styles. Users can view a list of spacing values (from xxxs to xxxlg) and inspect both UI and Content typography scales (including Display, Headline, Subtitle, Body, Caption, Button, Overline, and Label styles) directly within the example app.
_flutter\_news\_example/packages/app\_ui/gallery/lib/spacing, flutter\_news\_example/packages/app\ui/gallery/lib/typography · high confidence
Add color palette gallery page
The app now includes a dedicated Colors page that displays the full set of design tokens defined in AppColors. This new gallery view presents each color swatch along with its name and hex code, and automatically renders shade variations for MaterialColor values, allowing users to preview the complete color system used in the application.
_flutter\_news\_example/packages/app\ui/gallery/lib/colors · high confidence
Added ads consent client for managing personalized ad permissions
The ads\_consent\_client package now includes a new AdsConsentClient that handles requesting and managing user consent for personalized ads. This client integrates with Google Mobile Ads to check consent status, load and display consent forms when required, and determine if consent has been obtained or is not required (e.g., for users outside the EEA/UK). It provides a clean API with error handling through RequestConsentFailure exceptions, allowing applications to properly manage advertising consent compliance.
_flutter\_news\_example/packages/ads\_consent\client/lib · high confidence
Added static configuration templates for Firebase, AdMob, and IDE launch settings
The generator now includes static template files for Firebase configuration (GoogleService-Info.plist, google-services.json), Android resource strings (strings.xml) containing placeholders for Facebook and AdMob IDs, and IDE launch configurations (launch.json, intellij\_run\_configuration.xml, ios\_flavor.xcscheme) that define run arguments for flavors, deep links, and Twitter API credentials.
tool/generator/static · high confidence
Firebase Authentication Client Implementation
The Firebase authentication client library now provides a concrete implementation of the authentication interface, enabling users to sign in via Apple, Google, Facebook, Twitter, and email magic links. This change introduces the core logic for managing authentication state and handling provider-specific credential flows within the Firebase Authentication Client package.
_flutter\_news\_example/packages/authentication\_client/firebase\_authentication\client/lib · high confidence
Initial iOS and Android platform configuration for the Gallery app
The Gallery app now includes the native iOS and Android project scaffolding required to build and run on mobile devices. This adds the standard Flutter platform files, including the iOS Xcode project (Runner), Info.plist, and Swift AppDelegate/SceneDelegate, as well as the Android manifest, Gradle configuration, and Kotlin MainActivity. Users can now build and install the app on iOS and Android simulators or physical devices.
_flutter\_news\_example/packages/app\ui/gallery/ios · high confidence
Initial release of the App UI component library
The \app\_ui\ package now provides a comprehensive set of reusable UI components and design tokens for the Flutter News Example application. This includes a full theming system with defined colors (\AppColors\), spacing (\AppSpacing\), and typography (\UITextStyle\, \ContentTextStyle\), along with generated asset accessors for icons and images via FlutterGen. The library exposes specific widgets such as \AppButton\ (with variants like black, blueDress, and outlined styles), \AppTextField\, \AppEmailTextField\, \AppSwitch\, \AppBackButton\, and \AppLogo\, as well as utility widgets like \ContentThemeOverrideBuilder\ for switching text themes and \showAppModal\ for consistent modal presentation.
_flutter\_news\_example/packages/app\ui/lib · high confidence
Initial release of the news\_blocks\_ui package
This change introduces the \news\_blocks\_ui\ package, providing a comprehensive set of reusable Flutter widgets for rendering news content blocks. The package exports a main library file and includes implementations for various block types such as \ArticleIntroduction\, \PostGrid\, \PostLarge\, \PostMedium\, \PostSmall\, \Html\, \Image\, \Video\, \Slideshow\, \BannerAd\, and \SectionHeader\. It also features specialized layouts like \PostMediumDescriptionLayout\ and \PostMediumOverlaidLayout\, a custom \SliverGrid\ delegate (\CustomMaxCrossAxisDelegate\) for grid layouts, and newsletter-related widgets (\NewsletterContainer\, \NewsletterSignUp\, \NewsletterSucceeded\). Additionally, it includes generated asset code via FlutterGen for icons and a \BlockActionCallback\ type for handling user interactions.
_flutter\_news\_example/packages/news\_blocks\ui/lib · high confidence
Introduce Flutter News Toolkit template generator
A new generator tool in \tool/generator\ automates the creation of the Flutter News project template. It copies the example application files, removes sensitive or environment-specific configurations (such as local run configs and Firebase credentials) via a blacklist, and replaces hardcoded values with Mustache template variables (e.g., \{{flutter\_version}}\, \{{project\_name}}\) in workflows and source files to allow customization during generation.
tool/generator · high confidence
Introduce dedicated news and notifications repository packages
The example app now includes two new library packages: \news\_repository\ and \notifications\_repository\. The \news\_repository\ package provides a \NewsRepository\ class that abstracts API calls for fetching feeds, categories, and search results, wrapping errors in specific failure types. The \notifications\_repository\ package introduces a \NotificationsRepository\ that manages device notification permissions, persists user category preferences to local storage, and handles subscribing/unsubscribing to notification topics based on those preferences.
_flutter\_news\_example/packages/news\_repository/lib, flutter\_news\_example/packages/notifications\repository/lib · high confidence
Introduce in-app purchase repository for subscription management
The \in\_app\_purchase\_repository\ package now provides a dedicated layer for handling in-app purchases and subscriptions. It exposes a repository that fetches subscription details from the API, initiates native purchases via the \in\_app\_purchase\ plugin, and streams purchase lifecycle updates (such as delivery and completion) to the application. This change introduces the core logic for managing user subscriptions within the \flutter\_news\_example\ app.
_flutter\_news\_example/packages/in\_app\_purchase\repository/lib · high confidence
Introduce modular notification and package info client packages
This change adds three new packages to the \flutter\_news\_example\ application: \notifications\_client\, \firebase\_notifications\_client\, and \one\_signal\_notifications\_client\, along with \package\_info\_client\. The \notifications\_client\ package defines a generic \NotificationsClient\ interface with \subscribeToCategory\ and \unsubscribeFromCategory\ methods, alongside specific failure exceptions. The \firebase\_notifications\_client\ package provides an implementation of this interface using Firebase Cloud Messaging, while the \one\_signal\_notifications\_client\ package offers an alternative implementation using the OneSignal SDK. Additionally, the \package\_info\_client\ package is introduced to provide app metadata such as the app name, package name, and version. Each package includes its own analysis options, documentation, and unit tests.
_flutter\_news\_example/packages/notifications\client · high confidence
Introduce share\_launcher package for native sharing
A new share\_launcher package has been added to the flutter\_news\_example workspace, providing a ShareLauncher class that wraps the share\_plus library to open the native share bottom sheet. This component allows users to share text content via a configurable ShareProvider, defaulting to the standard share\_plus implementation, and handles errors by throwing a typed ShareFailure.
_flutter\_news\_example/packages/share\launcher/lib · high confidence
Introduce stubbed in-app purchase client for the Flutter News example
The \purchase\_client\ package now provides a mock implementation of the \InAppPurchase\ interface to support the Flutter News example app. This stub simulates the purchase flow for a single 'premium' subscription product ($14.99 USD) by returning a pending purchase that transitions to a purchased status, allowing the example to demonstrate subscription logic without requiring real store integration.
_flutter\_news\_example/packages/purchase\client/lib · high confidence
Introduce user repository with subscription tracking and social authentication
The user\_repository package now provides a comprehensive layer for managing user identity and subscription status. It introduces a User model that extends AuthenticationUser to include a SubscriptionPlan, allowing the application to track and react to changes in the user's subscription tier. The UserRepository consolidates authentication flows for Apple, Google, Twitter, and Facebook, as well as email link sign-in, while also managing local storage for metrics such as the application open count.
_flutter\_news\_example/packages/user\repository/lib · high confidence
Introduction of Authentication Client interface and user model
The authentication\_client package now exposes a new abstract AuthenticationClient interface and an AuthenticationUser model. The interface defines methods for signing in via Apple, Google, Facebook, Twitter, and email links, as well as logging out and deleting accounts, with specific exception types for each operation. The AuthenticationUser model represents the current user state, including properties for ID, email, name, photo, and a flag indicating if the user is new, along with a static anonymous instance for unauthenticated states.
_flutter\_news\_example/packages/authentication\_client/authentication\client/lib · high confidence
Introduction of PermissionClient for notification permission management
A new PermissionClient class has been added to the permission\_client package, providing a simplified interface for handling device notification permissions. This client exposes methods to request notification access, check the current notification status, and open the app's permission settings page, leveraging the underlying permission\_handler library.
_flutter\_news\_example/packages/permission\client/lib · high confidence
Introduction of article view tracking and storage
The article repository now includes functionality to track and persist article view counts. This change introduces specific failure types for view-related operations (increment, decrement, reset, fetch) and implements an \ArticleStorage\ component to manage local persistence of view counts and their reset dates, enabling the application to accurately monitor user engagement with articles.
_flutter\_news\_example/packages/article\repository/lib · high confidence
Introduction of the Flutter News Example API
This change introduces the Flutter News Example API, a Dart-based backend service built with Dart Frog. It provides an in-memory data source for news content, including articles, feeds, categories, and user subscriptions, and exposes a client library for interacting with the API. The API supports both remote and local (localhost) endpoints, handles JSON serialization for news blocks and user data, and includes middleware for user authentication and data source provisioning.
_flutter\_news\_example/api, flutter\_news\_example/packages/app\ui/gallery/lib · high confidence
New \`news\_blocks\` package for structured news content models
The \news\_blocks\ library now provides a comprehensive set of data models for representing structured news content, enabling consistent serialization and deserialization of UI components. This includes a base \NewsBlock\ interface with a central \fromJson\ factory that dispatches to specific implementations such as \PostLargeBlock\, \PostMediumBlock\, \PostSmallBlock\, \PostGridGroupBlock\, \ImageBlock\, \VideoBlock\, \SlideshowBlock\, \BannerAdBlock\, and various text blocks. The package also introduces a \BlockAction\ system to handle user interactions (e.g., navigating to articles, videos, or categories) and a \Category\ model for feed organization. All models use \json\_serializable\ for JSON mapping and \equatable\ for value-based equality, ensuring reliable state management and data integrity across the application.
_flutter\_news\_example/api/packages/news\blocks/lib · high confidence
New ad, analytics, and app lifecycle management layers
The example app now includes dedicated layers for full-screen ad management, analytics tracking, and core app state. A new \FullScreenAdsBloc\ handles the loading and display of interstitial and rewarded ads with retry policies, while a \StickyAd\ widget provides a bottom-anchored banner ad. An \AnalyticsBloc\ centralizes event tracking and user ID management, and an \AuthenticatedUserListener\ automatically logs registration or login events. The \AppBloc\ now manages authentication status, onboarding flow, and a login overlay for anonymous users after a set number of app opens.
_flutter\_news\example/lib · high confidence
New analytics repository package with Firebase integration and NTG event models
The \analytics\_repository\ package has been introduced to centralize analytics tracking. It provides an \AnalyticsRepository\ class that wraps the Firebase Analytics SDK to handle event tracking and user ID management, exposing specific failure types for error handling. Additionally, the package includes a comprehensive set of data models for analytics events, including a base \AnalyticsEvent\ class and a hierarchy of News Tagging Guidelines (NTG) compliant events such as newsletter sign-ups, user login/registration, article milestones, comments, social shares, push notifications, and paywall interactions.
_flutter\_news\_example/packages/analytics\repository/lib · high confidence
New gallery pages for app UI components
The gallery now includes dedicated pages to showcase the app's custom UI widgets. Users can navigate to the Widgets page to view and interact with the App Logo (light and dark variants), App Buttons (including social login, subscription, and action types), App Back Button (with light/dark mode toggle), App Switches (with and without labels), Text Fields (including email-specific fields), and the App Modal dialog. These pages serve as a visual reference and interactive demo for the design system's core components.
_flutter\_news\_example/packages/app\ui/gallery/lib/widgets · high confidence
New gallery project for app\_ui showcase with updated analysis and deployment config
A new gallery project has been added to showcase the app\_ui package. This includes a .gitignore file tailored for Flutter/Dart development, a .metadata file tracking the stable Flutter channel, and a README describing the project's purpose. The project uses Very Good Analysis 10.0.0 for code quality checks and includes a firebase.json configuration to deploy the web build to the 'flutter-news-example-gallery' hosting site.
_flutter\_news\_example/packages/app\ui/gallery · high confidence
New internal packages for storage, authentication, email, and form validation
The \flutter\_news\_example\ application now includes several new internal packages to support core functionality. The \storage\ package defines a \Storage\ interface and \StorageException\, implemented by \persistent\_storage\ (using \SharedPreferences\) and \secure\_storage\ (using \FlutterSecureStorage\). The \authentication\_client\ package introduces \token\_storage\ with an \InMemoryTokenStorage\ implementation for managing auth tokens. The \email\_launcher\ package provides an \EmailLauncher\ class to open the native email app on Android and iOS. Additionally, the \form\_inputs\ package exposes reusable form validation logic, specifically an \Email\ input class using \formz\ for validating email addresses.
(repo-wide) · high confidence
Web app manifest and entry point added for the gallery example
The web entry point (index.html) and PWA manifest (manifest.json) for the gallery example have been added, enabling the app to run as a standalone web application with proper icons, theme colors, and mobile app capabilities.
_flutter\_news\_example/packages/app\ui/gallery/web · high confidence
Behavioural changes
Added iOS Flutter configuration files for the example app
The iOS configuration for the flutter\_news\_example app now includes the standard Flutter framework metadata (AppFrameworkInfo.plist) and build configuration files (Debug.xcconfig and Release.xcconfig). These files ensure the example app correctly references the Flutter engine and CocoaPods dependencies during build.
_flutter\_news\example/ios/Flutter · high confidence
Android project structure and configuration updates
The Android build environment has been updated to use Gradle 8.14, and the app configuration now includes the AD\_ID permission required for ads on Android 13 and above. Additionally, the project has been renamed to flutter\_news\_example, and the AndroidManifest.xml has been updated to support deep linking and social authentication via new intent filters and meta-data for Facebook and Twitter.
_flutter\_news\example/android · high confidence
Renamed example project to flutter\_news\_example and added iOS workspace and coverage tooling
The example project has been renamed from google\_news\_project to flutter\_news\_example. This change includes the addition of the iOS Runner.xcworkspace configuration files (contents.xcworkspacedata and IDEWorkspaceChecks.plist) to support CocoaPods integration, and introduces a new tool/coverage.sh script that automates running Flutter tests with coverage reporting, excluding generated code and localization files, and checking for 100% coverage.
_flutter\_news\_example/ios/Runner.xcworkspace, flutter\_news\example/tool · high confidence
iOS project configuration updated for development and production build schemes
The iOS project configuration in the Runner.xcodeproj has been updated to support distinct development and production build schemes. This change introduces separate Xcode schemes for 'development' and 'production' environments, allowing users to build and run the app with specific configurations for each. The development scheme includes a command-line argument to enable Firebase Analytics debug logging (-FIRAnalyticsDebugEnabled), while the production scheme is configured for standard release builds. Additionally, the project structure now explicitly references the GoogleService-Info.plist file within a 'development' group, and the build phases have been adjusted to handle this configuration, ensuring that the correct Firebase settings are applied based on the selected scheme.
_flutter\_news\example/ios/Runner.xcodeproj · high confidence
iOS project scaffold updated for Flutter 3.41 and modern iOS lifecycle
The iOS Runner configuration has been refreshed to support the latest Flutter version and modern iOS app lifecycle requirements. The native entry point now implements the \FlutterImplicitEngineDelegate\ protocol to handle the implicit engine initialization, and a dedicated \SceneDelegate\ is introduced to manage the app scene. The \Info.plist\ has been updated to include \UIApplicationSupportsIndirectInputEvents\ for newer hardware support, configures the app for multiple scenes, and sets up deep linking and ad identifiers via environment variables. Additionally, the project now includes optimized app icon assets, a launch screen storyboard, and separate Firebase configuration files for development and production environments.
_flutter\_news\example/ios/Runner · high confidence
Test coverage
Added comprehensive test suite for news blocks UI components; Added comprehensive unit and widget tests for core application logic; Added serialization tests for news blocks; Added tests for API middleware dependency providers; Added tests for authentication client exports and user model; Added unit and widget tests for app\_ui components; Added unit tests for AdsConsentClient consent request flow; Added unit tests for AppTheme and AppDarkTheme configuration; Added unit tests for ArticleRepository and ArticleStorage; Added unit tests for FirebaseAuthenticationClient; Added unit tests for InAppPurchaseRepository; Added unit tests for News and Notifications repositories; Added unit tests for PermissionClient method channel interactions; Added unit tests for ShareLauncher and ShareFailure; Added unit tests for data models and data source; Added unit tests for the Flutter News API routes; Added unit tests for the Flutter News Example API client; Added unit tests for the analytics repository and event models; Added unit tests for the purchase client library; Added unit tests for user repository, user model, and user storage.
Dependencies
Upgrade docs site to Docusaurus 3.9 and React 19
The documentation site has been upgraded to Docusaurus 3.9.2 and React 19.2.1, along with corresponding updates to TypeScript (5.9.3), ESLint (9.39.1), and other development dependencies. This brings the docs site up to date with the latest stable releases of its underlying framework and tooling.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 62.
Lenses
- Code Health 99
- Architecture 90
- Maturity 51
- Readiness 61
- Security 68
- Domain Modelling 100
Changes since last survey
- 300 commits — 289 feature/other, 11 fixes
By area
- docs/package-lock.json — 135 commits
- flutter_news_example/packages — 44 commits
- .github/workflows — 43 commits
- flutter_news_example/api — 38 commits
- docs/docs — 13 commits
- flutter_news_example/lib — 7 commits
- flutter_news_example/ios — 6 commits
- .github/CODEOWNERS — 3 commits
- flutter_news_example/android — 3 commits
- (root) — 2 commits
- .github/dependabot.yaml — 2 commits
- (repo) — 1 commit
- docs/.eslintrc.js — 1 commit
- docs/docusaurus.config.js — 1 commit
- tool/generator — 1 commit
Notable commits
- fix: Fix: Swap doc pages (#896)
- fix: Fix: model json serializable generation (#1055)
- fix: Revert "chore(deps): Bump dart_frog from 0.3.3 to 0.3.5 in /flutter_news_example/api" (#849)
- fix: fix copyright year (#1207)
- fix: fix(ci): golden test comparator implementation (#1232)
- fix: fix: add missing build.gradle changes (#1309)
- fix: fix: docs publishing workflow (#1592)
- fix: fix: fix deletion tracking in generate_flutter_news_template (#1142)
- fix: fix: remove Podfile.lock from template (#1135)
- fix: fix: remove felangel from reviewers in template workflow (#1638)
- fix: fix: upgrade firebase dependencies (#1368)
- change: A few smaller tweaks to readme (#1576)
- change: A few tweaks to overview.md (#1604)
- change: Chore: upgrade Flutter version to Flutter 3.10 (#930)
- change: Do not update patch versions for dependabot/github-actions. (#1412)
- change: Docs: Caching application state/ hydrated bloc (#885)
- change: Enhancement: Disable caching in debug mode (#884)
- change: Fix Typo in social_authentication.md (#1086)
- change: Refactor: Lazy load on PostGrid issue (#864)
- change: Refactor: rename from show_modal_app_test to show_app_modal_test (#897)
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
VGVentures/news_toolkit was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 6655bbc503cdc8c28540536d611cd7b72fbda220 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.