gskinnerTeam/flutter_vignettes
48.0
Weak · 23 September 2026
13.9k
lines of production code
Dart
primary language
5
measurements over time
What this system is
This system is a collection of Flutter-based vignettes and shared UI components designed to demonstrate various user interface patterns and interactions. It provides concrete examples of modern Flutter development practices, including the Flutter V2 Android embedding, null safety, and platform-specific configurations for Android, iOS, and Windows. The codebase showcases diverse interaction models such as scroll physics, form state management, 3D rendering, and visual effects, all refactored to use current best practices and dependencies.
Features
Add Windows platform support and migrate to Flutter V2 embedding
The plant\_forms vignette now supports Windows, adding the necessary CMake build files, C++ runner code, and resource scripts to build and run the application on that platform. Additionally, the Android configuration has been updated to use the V2 Flutter embedding, which includes updating the AndroidManifest.xml to remove the deprecated FlutterApplication class and register the Flutter engine, as well as updating the MainActivity to use the new embedding API. The project has also been migrated to support non-nullable types (nnbd) and updated to use Gradle 7.6.3.
_vignettes/plant\forms · high confidence
Refactor plant forms into dedicated page components
The plant form implementation has been refactored to use dedicated page components (PlantFormInformation, PlantFormPayment, PlantFormSummary) organized under the form\_pages directory. This change introduces a Provider-based state management pattern where form data is stored in a shared state object rather than passing form values as widget parameters. The summary page now includes a 'Next' button to navigate to the information page, and the payment page uses a shared form state for validation and data storage.
_vignettes/plant\_forms/lib/form\pages · high confidence
Behavioural changes
Android app updated to Flutter v2 embedding
The Android configuration for the Gooey Edge app has been upgraded to use the Flutter v2 embedding model. This involves migrating the main activity from the deprecated io.flutter.app.FlutterActivity to io.flutter.embedding.android.FlutterActivity, updating the AndroidManifest.xml to declare the flutterEmbedding version 2, and introducing NormalTheme styles for proper dark mode support. Users will experience improved compatibility with modern Android versions and better integration with Flutter's plugin system.
_vignettes/gooey\edge/android · high confidence
Improved carousel interaction and visual feedback
The gooey\_edge vignette now features a more responsive and visually accurate carousel interaction. The draggable swipe gesture has been refined to use local pointer coordinates, ensuring smoother and more accurate tracking during user interaction. Additionally, the Sun and Moon indicator widgets now utilize animated opacity transitions to fade out non-current images, providing a polished visual cue for the active slide. The underlying GooeyEdge class has been updated to extend ChangeNotifier, enabling proper state management and repaint notifications during animation ticks.
_vignettes/gooey\edge · high confidence
Increased item counts in fluid navigation bar content widgets
The fluid navigation bar's content widgets now display more items: the home and account pages increased their list item counts from 9 to 20, and the grid content increased its generated items from 20 to 30. This results in longer scrolling lists and a denser grid layout within the fluid navigation bar.
_vignettes/fluid\_nav\bar/lib/content · high confidence
Migrate bubble\_tab\_bar to Flutter v2 Android embedding and null safety
The bubble\_tab\_bar vignette has been updated to use the Flutter v2 Android embedding, which removes the need for a custom MainActivity Java class and allows the app to support both light and dark themes via new styles.xml and AndroidManifest.xml configurations. The Dart code has been migrated to null safety, updating widget constructors and properties (e.g., in ClippedView, ContentBox, NavBar, and NavbarButton) to use nullable types and required parameters. Additionally, the demo now uses a dynamic accent color via the theme's colorScheme, and the app disables the debug banner.
(repo-wide) · medium confidence
Migrate spending\_tracker to Flutter V2 embedding and NNBD
The spending\_tracker vignette has been updated to support the Flutter V2 Android embedding, which removes the need for the \GeneratedPluginRegistrant\ and allows the app to run on newer Android/Flutter versions. This includes updating the \MainActivity\ to extend \FlutterActivity\ directly, configuring \AndroidManifest.xml\ with the \io.flutter.embedding.android.NormalTheme\ meta-data, and adding the required \queries\ block for text processing. Additionally, the codebase has been migrated to Null Safety (NNBD), replacing the custom \ScalingInfo\ utility with a centralized \appScale\ getter and shared \text1\/\text2\ style definitions in \main.dart\, and updating various components to use \required\ parameters and null-safe types.
_vignettes/spending\tracker · high confidence
Migrate ticket\_fold vignette to Flutter V2 embedding and null safety
The ticket\_fold vignette has been updated to support the Flutter V2 Android embedding, which modernizes the Android project structure and configuration. This includes migrating the Android manifest to remove the deprecated \io.flutter.app.FlutterApplication\ and \SplashScreenUtil\ metadata, adding the required \flutterEmbedding\ and \NormalTheme\ metadata, and updating the \MainActivity\ to extend \FlutterActivity\ without manual plugin registration. Additionally, the codebase has been migrated to Dart null safety, making constructor parameters required and updating type signatures (e.g., \VoidCallback?\ for optional callbacks). The Android build system has also been upgraded to Gradle 7.6.3, and the app now supports dark mode styling via \values-night/styles.xml\. These changes ensure compatibility with modern Flutter versions and improve type safety.
_vignettes/ticket\fold · high confidence
Modernizes parallax travel card vignette for Flutter 2.0+ and updates Android build
The parallax\_travel\_cards\_hero vignette has been updated to support the Flutter V2 Android embedding, replacing the old \GeneratedPluginRegistrant\ with the new \MainActivity\ and \AndroidManifest\ configuration. The codebase has been migrated to non-nullable types (NNBD) and null-safety, updating constructors and method signatures accordingly. Additionally, the Android build system has been upgraded from Gradle 5.6.2 to 7.6.3, and the app's layout has been adjusted to remove the app bar and center content within a scrollable view, while also fixing overflow issues and updating the README instructions.
_vignettes/parallax\_travel\_cards\hero · medium confidence
Refactor form input components to support state management and validation improvements
The form input components in the plant forms module have been refactored to improve state management and validation behavior. The checkbox input now properly toggles its state and updates its label, while the text input supports an optional value notifier for external state synchronization. The credit card input has been updated to use a new masked text library, includes an initial value prop, and fixes validation errors by adding a key for the coupon input. Additionally, the dropdown menu has been renamed and refactored to use a more robust selection handling, and the input validator has been converted to static methods for better performance and null-safety compliance.
_vignettes/plant\_forms/lib/form\inputs · medium confidence
Refactored plant forms demo to use shared state and nested navigation
The plant forms demo was refactored to use a shared state object (via Provider) to manage form data across multiple form views, replacing the previous approach of passing form values as widget parameters. The demo now utilizes a nested Navigator to manage the flow between the summary, payment, and other form steps, and includes a back-button handler to properly navigate within this nested stack. Additionally, the \demo\_data.dart\ file was updated to use static methods and a \FormKeys\ class for input field identifiers, and \main.dart\ was updated to include a custom scroll behavior.
_vignettes/plant\forms/lib · medium confidence
Refine fluid navigation bar demo and components
The fluid navigation bar demo now includes a custom scroll behavior and hides the debug banner. The navigation bar's change callback is now nullable, and internal state variables are updated for null safety. The demo also imports a shared scroll behavior, and the button and icon components have been refactored for cleaner code and null safety.
_vignettes/fluid\_nav\bar/lib · medium confidence
Simplifies constrained scroll physics configuration
The ConstrainedScrollPhysics class has been updated to remove the maxOverscrollFactor parameter, requiring only the maxOverscroll value. This change simplifies the API by eliminating the ability to define overscroll limits as a factor of the viewport dimension, relying instead on a fixed pixel value. Additionally, the class has been migrated to null safety, updating the parent parameter to be nullable and using required for the maxOverscroll property.
_vignettes/\shared/lib/physics · high confidence
Update dark\_ink\_transition vignette to Flutter V2 embedding and modernize Android/iOS configurations
The dark\_ink\_transition vignette has been updated to use the Flutter V2 Android embedding, which removes the need for manual plugin registration in MainActivity.kt and updates AndroidManifest.xml with the new meta-data and activity configuration. On iOS, the project has been upgraded to Xcode 14.3 (project file version 54), enabling the RunnerTests target and updating the minimum OS version to 12.0. Additionally, the Android theme styles have been refactored to support dark mode, and the app now disables the debug banner and uses a custom scroll behavior.
_vignettes/dark\_ink\transition · high confidence
Update product\_detail\_zoom vignette for Flutter v2 embedding and null safety
The product\_detail\_zoom vignette has been updated to support the Flutter v2 Android embedding, which removes the need for manual plugin registration and allows the app to use the new AndroidManifest.xml configuration with explicit activity exports and intent queries. The codebase has also been migrated to null safety, converting nullable types to non-nullable where appropriate and updating constructor signatures to use 'required' and 'Key?' patterns. Additionally, the Android build configuration has been upgraded to use Gradle 7.6.3, and the app now disables the debug banner and uses a custom scroll behavior.
_vignettes/product\_detail\zoom · high confidence
Updated Android configuration for Flutter V2 embedding
The Android project files have been updated to support the Flutter V2 embedding model. This includes migrating the main activity to extend FlutterActivity, updating the AndroidManifest.xml to include the flutterEmbedding=2 metadata and NormalTheme, and removing the deprecated io.flutter.app.FlutterApplication and related splash screen metadata. Additionally, the package name was changed from com.example.fluid\_nav\_bar to com.gskinner.fluid\_nav\_bar, and the AndroidManifest was updated to include required queries for text processing.
_vignettes/fluid\_nav\bar/android · high confidence
Updated Sparkle Party vignette for Flutter V2 embedding and null safety
The Sparkle Party vignette has been updated to support the Flutter V2 Android embedding, which removes the need for manual plugin registration and allows for proper dark mode support via separate launch themes. The codebase has also been migrated to Dart null safety, introducing nullable types for optional parameters and using late initialization for state fields. Additionally, the Android build configuration was updated to use Gradle 7.6.3, and the app's debug banner was disabled.
_vignettes/sparkle\party · high confidence
Updated basketball\_ptr vignette with modernized Android and iOS configurations
The basketball\_ptr demo has been updated to use the Flutter V2 Android embedding, which removes the need for manual plugin registration in the MainActivity and updates the AndroidManifest to include required permissions and metadata. On iOS, the project has been upgraded to Xcode 15.10 / Xcode 9.3 compatibility, the minimum OS version has been raised to 12.0, and a unit test target (RunnerTests) has been added to the Xcode project. Additionally, the app now includes a custom scroll behavior and disables the debug banner.
_vignettes/basketball\ptr · high confidence
Updated indie\_3d vignette with modern Android embedding and improved loading state
The indie\_3d vignette has been updated to use the V2 Android embedding, which removes the need for a custom MainActivity and allows for proper dark mode support via separate styles.xml files. The app now displays a 'Loading assets...' message while 3D models and images are being pre-cached, preventing a blank screen during initialization. Additionally, the Android manifest has been updated to include the required \<queries\> block for text processing, and the Gradle build has been upgraded to version 7.6.3.
_vignettes/indie\3d · high confidence
Updated parallax\_travel\_cards\_list to Flutter V2 embedding and modernized UI components
The parallax\_travel\_cards\_list vignette has been updated to support the Flutter V2 Android embedding, which requires migrating Android manifest and activity configurations. The app's layout has been restructured to vertically center and scroll content using a SingleChildScrollView, and the debug banner has been disabled. Internally, the code has been migrated to null safety, and the Hotel model now uses a 'rating' field instead of 'rate'. The UI displays hotel ratings as star icons and includes a scroll behavior for consistent scrolling across platforms.
_vignettes/parallax\_travel\_cards\list · high confidence
Updated shared UI components for null safety and modern Flutter APIs
The shared UI library has been migrated to null safety, updating constructor signatures to use \required\ and nullable types (\Key?\, \Widget?\, etc.) across \blend\_mask\, \custom\_paint\_mask\, \widget\_mask\, \sprite\, \animated\_sprite\, and placeholder widgets. Additionally, \app\_scroll\_behavior.dart\ was added to enable mouse pointer dragging on desktop for easier responsive testing, and \rotation\_3d.dart\ was moved to the shared UI package.
_vignettes/\shared/lib/ui · medium confidence
Fixes
Updated Android build configuration and documentation for fluid\_nav\_bar
The fluid\_nav\_bar vignette's Android build files were updated to use Gradle 7.6.3, and the .gitignore file was updated to exclude keystore and .jks files to prevent accidental public sharing of sensitive keys. Additionally, the README.md was corrected to use the proper 'flutter pub get' command and the preview image and showcase website links were updated to the correct /vignettes/ paths.
_vignettes/fluid\_nav\bar · high confidence
Dependencies
Update Dart SDK and Android build configurations for null safety and modern Gradle
This change updates the Dart SDK constraints to require version 2.12.0 or higher, enabling null safety across the project. Additionally, the Android build files (build.gradle, settings.gradle, gradle.properties) are modernized to use the new Gradle plugin management system, migrate to AndroidX, and update the Kotlin and Android Gradle plugin versions. The pubspec.lock files are also updated to reflect the new Dart SDK and updated transitive dependencies.
(dependencies) · high confidence
Updated shared project configuration and dependencies
The shared project has been updated with new IDE configuration files (\.idea/\) and a \package\_config.json\ that pins dependencies to specific versions (e.g., \async\ 2.11.0, \collection\ 1.18.0) and sets the Dart language version to 2.12. This ensures consistent dependency resolution and IDE setup for the shared codebase.
_vignettes/\shared · 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
Score
- CAI 40 → 48 (+8.0)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 97 (-2.7)
- Architecture 100 → 100 (-0.2)
- Maturity 32 → 46 (+14.4)
- Readiness 24 → 36 (+11.7)
- Security 100 → 100 (+0.0)
- Domain Modelling 100 → 100 (+0.0)
- Accessibility 40 → 40 (+0.0)
Resolved (6)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- No exposed public API
- Test reliability not included
- complexity unreadable for .dart, .java, .kt, .swift — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (36)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Duplicated block (12 lines × 2) (vignettes/_shared/lib/ui/custom_paint_mask.dart)
- Duplicated block (13 lines × 2) (vignettes/plant_forms/lib/form_inputs/credit_card_input.dart)
- Duplicated block (13 lines × 2) (vignettes/spending_tracker/lib/spending_date_range.dart)
- Duplicated block (14 lines × 2) (vignettes/parallax_travel_cards_hero/lib/hotel_list_renderer.dart)
- Duplicated block (14 lines × 2) (vignettes/sparkle_party/lib/particlefx/comet.dart)
- Duplicated block (19–23 lines × 3) (vignettes/dark_ink_transition/lib/dark_ink_controls.dart)
- Duplicated block (5 lines × 2) (vignettes/_shared/lib/ui/widget_model.dart)
- Duplicated block (5 lines × 2) (vignettes/plant_forms/lib/form_inputs/dropdown_menu.dart)
- Duplicated block (6 lines × 2) (vignettes/plant_forms/lib/form_inputs/credit_card_input.dart)
- Duplicated block (7 lines × 2) (vignettes/gooey_edge/lib/gooey_edge.dart)
- Duplicated block (7 lines × 2) (vignettes/plant_forms/lib/form_inputs/credit_card_input.dart)
- Duplicated block (7 lines × 2) (vignettes/sparkle_party/lib/particlefx/fireworks.dart)
- Duplicated block (8 lines × 2) (vignettes/sparkle_party/lib/particlefx/comet.dart)
- Duplicated block (8 lines × 4) (vignettes/bubble_tab_bar/lib/main.dart)
- Duplicated block (8–9 lines × 2) (vignettes/sparkle_party/lib/particlefx/pinwheel.dart)
- Duplicated block (9 lines × 2) (vignettes/basketball_ptr/lib/spinning_basketball.dart)
- Duplicated block (9 lines × 2) (vignettes/bubble_tab_bar/lib/content/gallery_page.dart)
- Fireworks.tick (cognitive 17) (vignettes/sparkle_party/lib/particlefx/fireworks.dart)
- …and 16 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
gskinnerTeam/flutter_vignettes 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 055406a71912d7a7d89420359988963e0b39ed98 — 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.