Skip to content
CAI
Software that uses CAICheck a score

flutter-form-builder-ecosystem/flutter_form_builder

69.0

Adequate · 19 September 2026

6.3k

lines of production code

Dart

with C++

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Flutter library for building complex, multi-platform forms, providing a comprehensive suite of customizable input widgets such as checkboxes, dropdowns, date pickers, and chips. It enables developers to create dynamic and conditional form fields with robust validation, auto-validation modes, and value transformation capabilities. The library supports a wide range of platforms including Android, iOS, Web, Linux, macOS, and Windows, and has been modernized to align with Material 3 design standards and Flutter's native FormField API.

How it got here

2018 — Flutter v2 migration and API modernization

14 changes.

The project underwent a comprehensive migration to Flutter v2, updating the example app to support multiple platforms with Kotlin and Swift while adopting Material 3 and modern language features. The core library was refactored to align with Flutter's standard FormField API, replacing legacy input classes and restructuring exports to improve extensibility and code quality.

2019–2022 — Material 3 migration and platform expansion

8 changes.

The project migrated its form field widgets and example application to the Material 3 design system, updating underlying components to use the material\_ui package. This period also involved expanding platform support for the example app to include web and Linux desktop, alongside adding new features like display value configuration and comprehensive test coverage for validation and dynamic field behaviors.

2023–2026 — platform expansion and test coverage

7 changes.

The project expanded the example application to support Windows and macOS desktop platforms, adding native runners and build configurations. Concurrently, it introduced utility extension methods for validation and significantly increased test coverage through unit and widget tests for new features and existing form components.

Features

Add Linux desktop platform support to the example app

The example application now includes the necessary build configuration and native runner code to support Linux desktop. This change adds the CMake build files, GTK-based application entry points, and Flutter plugin registration infrastructure required to compile and run the example on Linux systems.

example/linux · high confidence

Add display value configuration and chip option component

Users can now control which values appear on sliders via the new DisplayValues enum (options: all, current, minMax, none) and utilize the new FormBuilderChipOption class for creating filter chip selections with optional avatars.

lib/src/options · high confidence

Add macOS platform support to the example app

The example application now includes a native macOS target, enabling users to build and run the Flutter app on macOS. This change adds the complete Xcode project structure (Runner.xcodeproj), including the AppDelegate and MainFlutterWindow implementations, standard macOS menu and assets, and necessary build configurations (xcconfig) and entitlements for sandboxing and JIT execution.

example/macos · high confidence

Added Windows desktop support to the example app

The example application now includes a complete Windows desktop runner, enabling users to build and run the app on Windows. This change adds the necessary CMake build configuration, native C++ runner code (including window management, DPI awareness, and console attachment), and resource files to the \example/windows\ directory.

example/windows · high confidence

Added web platform support for the example app

The example application now supports the web platform, enabling users to run and test the app in a browser. This change introduces the necessary \index.html\ entry point and \manifest.json\ configuration, which includes standard meta tags, favicon links, and PWA (Progressive Web App) icons, allowing the Flutter web build to initialize correctly and display properly on desktop and mobile browsers.

example/web · high confidence

New extension methods for AutovalidateMode and generic validation

Added two new extension files in lib/src/extensions. AutovalidateModeExtension provides convenience getters (isEnable, isAlways, isOnUserInteraction) to simplify checking AutovalidateMode states. GenericValidator adds an emptyValidator() method to nullable types, allowing unified empty checks for null, String, List, Map, Set, and Iterable values.

lib/src/extensions · high confidence

Behavioural changes

Added iOS workspace configuration files

The iOS example project now includes standard Xcode workspace settings, specifically enabling the 32-bit warning check and disabling the Previews feature in the workspace settings file.

example/ios/Runner.xcworkspace · medium confidence

Example app migrated to Material 3 and modern Flutter patterns

The example application in example/lib/sources has been completely rewritten to demonstrate the library's capabilities using modern Flutter practices. The examples now import and use the material\_ui package, reflecting a shift to Material 3 styling. Key behavioral updates include the adoption of AutovalidateMode for validation control, the use of ElevatedButton for submissions, and the implementation of new example scenarios such as conditional fields, dynamic field registration, and related dropdowns. The code also showcases advanced features like custom field builders, item decorations for radio/checkbox groups, and specific validation patterns like password confirmation and conditional email requirements.

example/lib/sources · high confidence

Example app restructured with multi-platform support and stricter linting

The example application has been significantly updated to serve as a comprehensive demonstration of Flutter Form Builder capabilities across multiple platforms. It now includes dedicated examples for complete forms, sign-up flows, dynamic and conditional fields, submit button states, and custom field implementations. The project structure has been expanded to support Android, iOS, Web, Windows, macOS, and Linux, with the Flutter channel updated from beta to stable. Additionally, the example now enforces stricter code quality standards by including an analysis\_options.yaml file that enables strict inference and stricter type checks, and the .gitignore has been cleaned up to better manage build artifacts and IDE configurations.

example · high confidence

Gradle wrapper upgraded to version 9.3.1

The Android example app's Gradle wrapper has been updated from version 4.4 to 9.3.1. This change ensures the example project uses a modern build tool version, which may affect build performance and compatibility with newer Android Gradle Plugin versions.

example/android/gradle · high confidence

Migrate Android example app to Flutter v2 embedding and Kotlin

The Android example app has been upgraded to use Flutter's v2 Android embedding, which changes the application lifecycle and requires the main activity to extend FlutterActivity. The project source code has been migrated from Java to Kotlin, and the AndroidManifest.xml has been updated to declare the v2 embedding, enable the app to process text intents, and configure normal and launch themes for proper dark mode support. Additionally, the deprecated io.flutter.app.FlutterApplication reference has been removed in favor of the new application name placeholder.

example/android · high confidence

Migrate example app to Material 3 and modern Flutter patterns

The example application has been updated to use the \material\_ui\ package and modern Flutter conventions, including null-safety (\super.key\), const constructors, and \MaterialApp\ localizations for \FormBuilderLocalizations\. The legacy single-page form layout in \main.dart\ has been replaced with a navigation-based demo structure using a new \CodePage\ widget to showcase individual examples like Complete Form, Custom Fields, and Signup Form. A new \minimal\_code\_example.dart\ file provides a standalone, copy-pasteable snippet demonstrating a basic FormBuilder setup with validation.

example/lib · high confidence

Migrate form fields to Material UI components

The form builder fields in this location have been rewritten to use the \material\_ui\ package instead of Flutter's standard Material library. This change updates the underlying widgets for \FormBuilderCheckbox\, \FormBuilderCheckboxGroup\, \FormBuilderChoiceChips\, \FormBuilderDateRangePicker\, \FormBuilderDateTimePicker\, \FormBuilderDropdown\, \FormBuilderFilterChips\, \FormBuilderRadioGroup\, and \FormBuilderRangeSlider\ to their \material\_ui\ equivalents, which may alter visual styling and available properties to match the library's API.

lib/src/fields · high confidence

Migrate iOS example app to Swift and modern scene lifecycle

The iOS example app has been converted from Objective-C to Swift, replacing the legacy AppDelegate and main.m entry point with new Swift-based AppDelegate and SceneDelegate files. The Info.plist has been updated to support the modern UIScene lifecycle, enabling multi-scene configuration, disabling minimum frame duration on iPhone, and supporting indirect input events, while also setting a custom display name and using the development language for localization.

example/ios/Runner · high confidence

Migrate to Flutter's standard FormField API and remove legacy input classes

The form builder has been refactored to align with Flutter's native \FormField\ and \Form\ widgets, replacing the previous \FormBuilderInput\ and \FormBuilderTypeAhead\ classes with a new \FormBuilderField\ base class and \FormBuilderFieldDecoration\. This change introduces standard Flutter properties like \autovalidateMode\ (replacing \autovalidate\), \focusNode\, and \valueTransformer\, while removing the old \controls\ list in favor of a \child\ widget tree. Users will now interact with a more standard, extensible field architecture that supports dynamic field registration and unregistration, though it requires updating code that relied on the legacy \FormBuilderInput\ type definitions.

lib/src · high confidence

Migrated GroupedCheckbox and GroupedRadio to Material 3

The GroupedCheckbox and GroupedRadio widgets in lib/src/widgets have been refactored to use the Material 3 library (imported from package:material\_ui/material\_ui.dart). This change updates the underlying UI components to the new Material Design 3 specifications, affecting the visual appearance and interaction behavior of these form fields. The widgets retain their existing API surface, including options for orientation, wrapping, spacing, and item decoration, ensuring that existing implementations continue to function while adopting the updated styling.

lib/src/widgets · high confidence

Restructured library exports and added migration rules for deprecated APIs

The library's public API surface has been reorganized: the main entry point now explicitly exports individual field implementations (such as FormBuilderCheckbox, FormBuilderRadioGroup, and FormBuilderFilterChips) and helper widgets (GroupedCheckbox, GroupedRadio) from the src/ directory, replacing the previous broad exports. Additionally, a new fix\_data.yaml file provides automated migration paths for breaking changes, specifically removing the deprecated maxChips and resetIcon parameters and the onPopInvoked callback, while renaming FormBuilderChoiceChip and FormBuilderFilterChip to their plural forms (FormBuilderChoiceChips, FormBuilderFilterChips).

lib · high confidence

Updated iOS example workspace configuration

The iOS example project's workspace settings have been updated to improve build consistency. The workspace now explicitly references its own project (changing the file reference from a group path to 'self'), and new workspace settings files have been added to disable Xcode's 32-bit warning computation and turn off Previews, ensuring a cleaner build environment for the example app.

example/ios/Runner.xcodeproj/project.xcworkspace · high confidence

iOS example app migrated to Swift and modernized build configuration

The iOS example project has been updated to use Swift instead of Objective-C, replacing AppDelegate.m and main.m with AppDelegate.swift and SceneDelegate.swift. The build system now relies on the FlutterGeneratedPluginSwiftPackage for plugin registration rather than embedding Flutter.framework directly, and a new RunnerTests target has been added for unit testing. Additionally, the Xcode project version was upgraded to 54 (Xcode 15.1), the minimum OS version requirement was removed from AppFrameworkInfo.plist, and the Xcode scheme was updated to include a prepare script, LLDB initialization, and GPU validation mode.

example/ios/Runner.xcodeproj · high confidence

Test coverage

Added form builder test utilities; Added initial iOS unit test scaffold; Added test coverage for form field validation, decoration, and dynamic field behavior; Added tests for AutoValidateMode and GenericValidator extensions; Added widget tests for FormBuilderChipOption, GroupedCheckbox, and GroupedRadio; Expanded test coverage for form field widgets; Removed example widget test; Updated test fixtures for Flutter FormBuilder API changes.

Dependencies

Example app migrated to Kotlin DSL and updated dependencies

The example app's Android build configuration has been migrated from Groovy to Kotlin DSL (build.gradle.kts), adopting the new Flutter Gradle Plugin and updating Android tooling to compile with Java 17 and Kotlin 2.4.0. The example's Dart dependencies have also been updated: the SDK constraint is now \>=3.13.0, Flutter \>=3.47.0, and it now includes material\_ui ^1.0.0, form\_builder\_validators ^11.2.0, and flutter\_lints \>=6.0.0 as dev dependencies.

(dependencies) · high confidence

Housekeeping

Initial project scaffolding and configuration

The repository is initialized with standard Flutter project configuration files, including \.fvmrc\ for Flutter Version Management, \analysis\_options.yaml\ inheriting from \flutter\_lints\, and an updated \.gitignore\. The project license is set to MIT, and the \README.md\ is populated with comprehensive documentation, badges, and usage examples for the \flutter\_form\_builder\ package. Additionally, legacy IDE-specific files like \flutter\_form\_builder.iml\ and an initial placeholder \FormBuilder.java\ are removed.

(repo-wide) · 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 69.

Lenses

  • Code Health 98
  • Architecture 98
  • Maturity 61
  • Readiness 65
  • Security 74
  • Domain Modelling 100

Changes since last survey

  • 300 commits — 240 feature/other, 60 fixes

By area

  • (repo) — 81 commits
  • lib/src — 71 commits
  • (root) — 65 commits
  • .github/workflows — 28 commits
  • test/src — 23 commits
  • example/lib — 12 commits
  • example/android — 4 commits
  • .github/dependabot.yaml — 2 commits
  • example/.metadata — 2 commits
  • example/ios — 2 commits
  • example/pubspec.lock — 2 commits
  • lib/flutter_form_builder.dart — 2 commits
  • test_fixes/fixes_10.0.0.dart — 2 commits
  • example/README.md — 1 commit
  • example/pubspec.yaml — 1 commit
  • example/windows — 1 commit
  • test/form_builder_checkbox_group_test.dart — 1 commit

Notable commits

  • fix: #1396 fix dynamic fields example widget issues
  • fix: Fix for issue 1350 with some changes to tests. This fix makes it so that valueTransformer can transform values to null.
  • fix: Fix for issue 1350 with some changes to tests. This fix makes it so that valueTransformer can transform values to null.
  • fix: Merge branch 'main' into fix-issue-1350
  • fix: Merge branch 'main' into fix-issue-1350
  • fix: Merge branch 'main' into fix/1370-reset-dirty-order
  • fix: Merge branch 'main' into fix/issue-1495
  • fix: Merge pull request #1 from nvshah/fix/1388-initialval_retained-main
  • fix: Merge pull request #1355 from n-bernat/fix/unregister-field-assert-message
  • fix: Merge pull request #1399 from flutter-form-builder-ecosystem/fix-lints-flutter-3.22
  • fix: Merge pull request #1423 from BrottarBasse/fix-issue-1350
  • fix: Merge pull request #1451 from flutter-form-builder-ecosystem/bugfix/1434-initial-value-state
  • fix: Merge pull request #1464 from flutter-form-builder-ecosystem/bugfix/#1455-enabled-decoration
  • fix: Merge pull request #1468 from flutter-form-builder-ecosystem/feature/#1368-fix-initial-date-on-date-picker
  • fix: Merge pull request #1489 from flutter-form-builder-ecosystem/bugfix/#1365-avoid-ovewrite-field-children
  • fix: Merge pull request #1489 from flutter-form-builder-ecosystem/bugfix/#1365-avoid-ovewrite-field-children
  • fix: Merge pull request #1493 from mvarendorff2/fix/dropdown-hint-missing
  • fix: Merge pull request #1493 from mvarendorff2/fix/dropdown-hint-missing
  • fix: Merge pull request #1507 from majumdersubhanu/fix/1370-reset-dirty-order
  • fix: Merge pull request #1512 from Yusufihsangorgel/fix/dropdown-unknown-initial-value
  • …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

flutter-form-builder-ecosystem/flutter_form_builder 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 f8706f7c3877215d7927a9d43cbb6babc125fd70 — 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.