rrousselGit/provider
58.7
Adequate · 23 September 2026
5.6k
lines of production code
Dart
primary language
5
measurements over time
What this system is
This system is a state management library for Flutter applications, designed to manage and propagate application state across the widget tree. It provides a suite of widgets, such as ChangeNotifierProvider and FutureProvider, to handle synchronous and asynchronous data, alongside utilities like Selector for optimized rebuilds. The system also includes a DevTools extension for inspecting provider states and a comprehensive test suite to ensure reliability.
How it got here
2018 — Provider API cleanup and modernization
6 changes.
This period focused on modernizing the codebase by removing legacy provider APIs and associated test files, while updating the provider package to version 6.1.5+1. The project also enforced stricter linting rules and migrated its CI configuration, reflecting a shift towards a newer Flutter plugin registration mechanism and a more granular public API surface.
2019–2023 — Provider v2 architecture and DevTools integration
8 changes.
This period was defined by the release of Provider v2, which introduced a modernized public API, new async provider types, and performance optimizations. The work also focused on comprehensive test coverage and deep integration with Flutter DevTools to enable state inspection and debugging.
Features
Add DevTools extension configuration for Provider
The Provider package now includes a DevTools extension, defined by a new \config.yaml\ and \.pubignore\ file in the \packages/provider/extension/devtools\ directory. This adds the necessary metadata and build exclusions to support the DevTools integration for the provider library.
packages/provider/extension · medium confidence
Added DevTools extension for inspecting \`package:provider\` state
A new DevTools extension has been added to the \packages/provider\_devtools\_extension\ directory, enabling users to inspect the state of \package:provider\ instances directly within the Flutter DevTools. This includes a provider list view, an instance viewer for detailed state inspection, and utilities for evaluating and mutating provider states. The extension integrates with the DevTools framework to provide a split-pane interface for selecting and viewing provider data.
_packages/provider\_devtools\extension · high confidence
Major Provider v2 architecture overhaul and new async providers
The provider package has been refactored into a v2 architecture, introducing new widget types for handling asynchronous data and listenable objects. This includes \StreamProvider\ and \FutureProvider\ for managing \Stream\ and \Future\ values, as well as \ListenableProvider\ for generic \Listenable\ objects. The existing \ChangeNotifierProvider\ has been restructured to extend \ListenableProvider\. Additionally, the \Selector\ widget now supports deep equality checks for filtering updates, and the \MultiProvider\ widget has been optimized to merge consecutive \InheritedProvider\s into a single widget for better performance. A DevTools extension has also been added to visualize the provider tree.
packages/provider/lib/src · high confidence
Removals
Removal of legacy Provider class
The legacy \Provider\ class, which previously exposed values using \InheritedWidget\ and provided a static \of\ method for accessing provider values, has been removed from the library. This change eliminates the older API in favor of the current provider model, requiring users to update their code to use the supported provider mechanisms.
lib/src · high confidence
Behavioural changes
Enforces comprehensive linting rules and updates analysis configuration
The project now enforces a comprehensive set of Dart linter rules via a new \all\_lint\_rules.yaml\ file, which is included in \analysis\_options.yaml\. This configuration enables strict analysis modes (strict-casts, strict-inference, strict-raw-types) and customizes specific lint rules (e.g., disabling \cascade\_invocations\ or \prefer\_double\_quotes\) to align with the project's coding standards. Additionally, the CI configuration has been migrated from Travis (\travis.yaml\) to a new \build\_devtool.sh\ script, and the \README.md\ has been removed from the root directory.
(repo-wide) · high confidence
Provider v2: New public API and restructured exports
The provider package has been updated to version 2, introducing a new public API surface. The main \provider.dart\ file now explicitly exports a comprehensive set of providers (including \InheritedProvider\, \ChangeNotifierProvider\, \ProxyProvider\, and \ValueListenableProvider\ variants), consumers, selectors, and related context types. Additionally, \single\_child\_widget.dart\ has been added to re-export the \nested\ package, indicating a tighter integration or dependency on the \nested\ library for widget composition.
packages/provider/lib · medium confidence
Removed Flutter auto-generated plugin registrant files
The build system no longer relies on the auto-generated plugin registrant files for Android and iOS. Specifically, the Android file GeneratedPluginRegistrant.java, the iOS files GeneratedPluginRegistrant.h and GeneratedPluginRegistrant.m, and the local.properties configuration file have been deleted. This change removes the legacy manual plugin registration mechanism, indicating a shift to a newer Flutter plugin registration approach.
android, ios · medium confidence
Removed legacy provider.dart barrel file
The lib/provider.dart barrel file has been removed. This file previously exported the internal src/provider.dart, and its removal indicates a restructuring of the public API surface, likely to enforce more specific, granular imports for consumers.
lib · high confidence
Updated example app to use MultiProvider and context.read/context.watch
The example application in packages/provider/example/lib/main.dart was refactored to demonstrate modern provider usage. It now uses MultiProvider to register the Counter ChangeNotifier, and the UI components utilize context.read for non-rebuilding interactions (like the floating action button) and context.watch for state display, replacing older patterns.
packages/provider/example/lib · high confidence
Test coverage
Add widget and unit tests for the example app; Added end-to-end tests and DevTools integration for the provider example app; Added null-safe test suite for the provider package; Removed provider\_test.dart.
Dependencies
Provider package updated to version 6.1.5+1 with new dependencies
The \provider\ package has been updated to version 6.1.5+1. This update introduces new dependencies, specifically \collection\ and \nested\, and updates the SDK constraints to support Dart 2.12.0 and Flutter 1.16.0 or higher. The root \pubspec.yaml\ has been removed, and the package structure has been reorganized into \packages/provider\ and \packages/provider\_devtools\_extension\. The DevTools extension now depends on \devtools\_extensions\ and \flutter\_riverpod\.
(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
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 52 → 59 (+6.5)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 97 → 96 (-0.7)
- Architecture 100 → 99 (-1.4)
- Maturity 26 → 29 (+2.3)
- Readiness 61 → 74 (+13.7)
- Security 75 → 90 (+14.9)
- Domain Modelling 100 → 100 (+0.0)
Resolved (7)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- High: security finding (details withheld)
- High: security finding (details withheld)
- No exposed public API
- Test reliability not included
- complexity unreadable for .dart — churn × complexity hotspots could not be measured
New (28)
- Duplicated block (9 lines × 2) (packages/provider/lib/src/consumer.dart)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Low cohesion: _InheritedProviderScopeElement (LCOM4 5) (packages/provider/lib/src/inherited_provider.dart)
- Medium: security finding (details withheld)
- No ADRs found
- TodoComment (packages/provider/lib/src/deferred_inherited_provider.dart)
- TodoComment (packages/provider/lib/src/inherited_provider.dart)
- TodoComment (packages/provider/test/null_safe/inherited_provider_test.dart)
- TodoComment (packages/provider_devtools_extension/integration_test/provider_integration_test.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_details.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- TodoComment (packages/provider_devtools_extension/lib/src/instance_viewer/instance_providers.dart)
- …and 8 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
rrousselGit/provider 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 23 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 6cfb56aec9f405dae0030d78f43bf4817265c5eb — 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-955b9cee9818.