voo_forms 0.3.3
voo_forms: ^0.3.3 copied to clipboard
A comprehensive cross-platform forms package with atomic design, clean architecture, and Material 3 support for Flutter applications.
0.3.3 - 2025-09-07 #
Added #
-
VooFile Entity: New domain entity for managing files from URLs or local uploads
- Supports both existing files (from URL) and newly uploaded files (PlatformFile)
- Automatic file metadata extraction (name, size, extension, MIME type)
- Helper methods for determining file origin and type
- Factory constructors for creating from URL or PlatformFile
-
Enhanced VooFileField: Major improvements to file field functionality
- Now uses VooFile entity instead of raw PlatformFile
- Support for displaying files from URLs (existing/uploaded files)
- Image preview support for URL-based image files
- "Uploaded" badge indicator for files from URLs
- Open file action button with URL launcher integration
- Proper Material 3 design compliance
-
URL Launcher Integration: Added file opening capability
- Opens files in new browser tab on web platforms
- Uses system default handler for file types on mobile/desktop
- Graceful error handling with user feedback
- Safe context checking to prevent crashes
Fixed #
- Read-Only File Field Display: Corrected visual presentation in read-only mode
- Maintains consistent Material 3 card layout in both states
- Shows proper file preview with icon, name, and size
- Displays "No file attached" message when empty
- Proper disabled state styling with reduced opacity
Changed #
- File Field API: Updated to use VooFile entity
- Breaking change: initialValue now accepts VooFile? instead of PlatformFile?
- onFileSelected callback now provides VooFile? instead of PlatformFile?
- Improved type safety and cleaner API surface
Dependencies #
- Added
url_launcher: ^6.2.0
for opening file URLs
0.3.2 - 2025-09-06 #
Added #
-
VooFormSection: New container widget for organizing form fields into logical sections
- Supports collapsible/expandable sections with smooth animations
- Material 3 design with proper surface colors and elevation
- Title, description, and optional leading/trailing widgets
- Visual containment with card-based design
- Implements VooFormFieldWidget for seamless integration with VooForm
-
VooReadOnlyField: Improved read-only field display
- Consistent sizing with editable fields (56px min height)
- Proper Material 3 styling and alignment
- Better visual hierarchy with standard field padding
Fixed #
-
VooFormPageBuilder Layout: Fixed RenderFlex overflow issues in unbounded height contexts
- Uses LayoutBuilder to detect bounded/unbounded constraints
- Adapts layout strategy based on context (Expanded vs Flexible)
- Properly handles preview environments and nested scrollables
-
Read-only Field Consistency: All field types now properly handle read-only state
- Unified approach using VooReadOnlyField for better UX
- Labels handled by parent widgets to avoid duplication
- Consistent sizing and alignment across all field types
Changed #
- Material 3 Compliance: Updated components to follow Material 3 design guidelines
- Better typography hierarchy
- Improved surface colors and elevation
- Consistent spacing and padding
- Professional visual appearance
0.3.1 - 2025-09-02 #
Fixed #
-
Initial Values Display: Fixed all field types to properly display their initial values
- Text-based fields (VooTextField, VooEmailField, VooPasswordField, etc.) now correctly show initial values
- VooDateField properly formats and displays initial dates with default MM/dd/yyyy format
- VooDateFieldButton now correctly displays initial date values on the button
- VooAsyncDropdownField immediately displays initial values before async loading completes
- Added comprehensive test coverage for all field types' initial value display
-
Dropdown Outside Click Dismissal: VooDropdownSearchField now properly dismisses when clicking outside
- Added full-screen GestureDetector to capture outside clicks
- Improved overlay management for better UX
-
ReadOnly State Enforcement: Fixed file and date fields to respect readOnly state
- VooFileField now properly disables file picking when readOnly is true
- VooDateFieldButton correctly disables date selection when readOnly is true
- Both fields now use getEffectiveReadOnly(context) to check form-level and field-level states
-
Form Loading State: Added isLoading property to VooForm
- When isLoading is true, form content is hidden and a loading indicator is shown
- Added loadingWidget parameter for custom loading indicators
- VooFormScope now propagates loading state to all child fields
Added #
- Comprehensive Test Coverage: Added all_fields_initial_values_test.dart
- 25 test cases covering every VooField type
- Verifies initial value display for all field variations
- Integration test simulating real-world form scenarios
0.3.0 - 2025-09-02 #
Added #
- VooDateFieldButton: New date field widget that uses a button interface for date selection
- Shows selected date or placeholder text on the button
- Supports custom date formatting and button types
- Includes prefix/suffix icon support
- Full integration with form validation and error display
Fixed #
- VooDateField Spacing: Fixed inconsistent spacing and decoration in VooDateField to match other field types
- Removed extra container wrapping that caused visual inconsistencies
- Date fields now properly display with the same styling as text fields
0.2.3 - 2025-09-02 #
Breaking Changes #
- VooListField Refactored to Stateless:
- VooListField is now completely stateless - developers manage state externally
- Changed from
itemTemplate
and internal state toitems
anditemBuilder
pattern - Callbacks simplified to
onAddPressed
,onRemovePressed
, andonReorder
- See migration guide in
example/list_field_migration.md
Changed #
- Widget Architecture Refactor:
- Replaced factory pattern (VooField.text(), etc.) with direct widget instantiation
- All field widgets now extend VooFieldBase for zero code duplication
- Direct widget pattern: use
VooTextField()
instead ofVooField.text()
- Cleaner architecture following KISS principle and atomic design
Added #
- New Field Widgets:
VooTextField
- Text input fieldVooEmailField
- Email input with validationVooPasswordField
- Password input with visibility toggleVooPhoneField
- Phone number input with formattingVooMultilineField
- Multi-line text inputVooNumberField
- Numeric input with constraintsVooIntegerField
- Integer-only inputVooDecimalField
- Decimal number inputVooCurrencyField
- Currency input with formattingVooPercentageField
- Percentage input (0-100)VooBooleanField
- Boolean switch/checkboxVooCheckboxField
- Single checkbox fieldVooDropdownField
- Dropdown selectionVooAsyncDropdownField
- Async loading dropdownVooListField
- Stateless dynamic list management
Fixed #
- Dropdown Label Issues: Fixed duplicate label rendering in dropdown fields
- Number Field Validation: Fixed min/max validation to return proper error messages
- Test Infrastructure: Updated all tests to work with new widget pattern
- Lint Issues: Fixed 150+ lint issues across the package
- File Architecture: Cleaned up exports and removed unused factory pattern files
Removed #
- Deprecated Factory Pattern Files:
- Removed
VooFormFieldBuilder
(old factory pattern) - Removed
VooFieldWidget
(old factory wrapper) - Removed layout widgets that depended on old pattern
- Kept
VooFormBuilder
for layout management
- Removed
Improved #
- Performance: Stateless VooListField improves performance by avoiding internal state
- Developer Experience: Direct widget instantiation is more intuitive
- Maintainability: Single responsibility principle with VooFieldBase
- Type Safety: Better type inference with direct widget usage
- Testing: Comprehensive test coverage for all new widgets
0.2.1 #
Fixed #
-
Dropdown Type Casting Errors: Improved type safety for dropdown callbacks
- Fixed runtime type errors with strongly typed callbacks for both regular and async dropdowns
- Updated
_invokeFieldOnChanged
method to use dynamic invocation with proper error handling - Resolved issues with custom types like
USState
,JurisdictionListOption
, and other domain objects - Prevents
type '(CustomType?) => void' is not a subtype of type '((dynamic) => void)?'
errors
-
Test Infrastructure: Enhanced dropdown testing utilities
- Created comprehensive
dropdown_test_helpers.dart
for reliable dropdown testing - Fixed test helpers to properly find
DropdownButtonFormField
of any generic type - Improved test reliability for async dropdown operations
- Updated test helpers to handle both searchable and regular dropdowns
- Created comprehensive
-
Dropdown Widget Detection: Improved widget finding in tests
- Fixed dropdown field detection to work with generic types
- Updated
tapDropdown
helper to properly identify dropdown widgets - Enhanced test utilities to handle both
TextFormField
andDropdownButtonFormField
types
Improved #
- Test Coverage: Fixed multiple failing tests
- Resolved dropdown callback test failures
- Fixed atomic component dropdown tests
- Improved async dropdown behavior test reliability
- Reduced test failures from 17 to 12
0.2.0 #
Added #
- VooSimpleForm Enhancements: Added
isEditable
parameter to VooSimpleForm- VooSimpleForm now supports form-level editability control
- Properly passes
isEditable
to underlying VooFormBuilder
Fixed #
-
Field-Level Read-Only Control: Individual fields now properly respect their
readOnly
property- Fields marked as
readOnly: true
display as read-only even when the form is editable - Enables mixed forms with both editable and read-only fields (e.g., auto-generated IDs, timestamps)
- Logic: Field is read-only if form
isEditable
is false OR fieldreadOnly
is true - Useful for forms with system-managed fields, calculated values, and display-only data
- Added comprehensive tests for field-level read-only behavior
- Fields marked as
-
Async Dropdown Type Casting: Fixed type casting error with strongly typed callbacks
- Error:
TypeError: Instance of '(CustomType?) => void' is not a subtype of type '((dynamic) => void)?'
- Updated
VooDropdownFieldWidget
to useFunction.apply
for invoking field callbacks - Async dropdowns now properly handle custom types like
JurisdictionListOption
- Prevents runtime type errors when using strongly typed onChanged callbacks
- Error:
0.1.21 #
Enhanced #
- VooField Factory Methods: All VooField factory methods now support
readOnlyWidget
parameter- Added
Widget? readOnlyWidget
parameter to all 19 field factory methods - Enables custom read-only display for every field type (text, email, password, phone, number, multiline, dropdown, dropdownAsync, dropdownSimple, boolean, checkbox, radio, date, time, integer, decimal, currency, percentage, slider)
- Works seamlessly with existing
isEditable
functionality in VooFormBuilder - Provides complete control over read-only field appearance
- Added
0.1.20 #
Added #
- Custom Read-Only Widget Support: Fields can now have custom read-only display widgets
- Added
readOnlyWidget
parameter toVooFormField
for custom read-only displays - When
isEditable: false
is set onVooFormBuilder
, custom widgets are used if provided - Falls back to default read-only display when no custom widget is specified
- Enables complete customization of how fields appear in read-only mode
- Added
Fixed #
- Dropdown Type Safety: Fixed VooFieldOption type mismatch errors
- Resolved runtime type errors with generic dropdown fields
- Fixed read-only mode dropdown type handling
- Improved type inference for String, int, double, and bool dropdowns
- Added proper support for async dropdowns with type preservation
Enhanced #
- Read-Only Mode: Comprehensive automatic details view for forms
- Added
isEditable
parameter toVooFormBuilder
(defaults to true) - All field types now have elegant read-only displays with icons
- Password fields show masked values in read-only mode
- Date/time fields show formatted values with appropriate icons
- Boolean fields display check/cancel icons with Yes/No text
- Slider fields show progress indicators in read-only mode
- Added
Added #
- Custom Field Support: Added VooFieldType.custom for arbitrary widgets
- Support for
customWidget
property for direct widget insertion - Support for
customBuilder
function for dynamic widget generation - Custom fields work in both editable and read-only modes
- Support for
Testing #
- Added comprehensive type safety tests for all field types
- Added tests for custom readOnlyWidget functionality
- Added tests for form toggle between editable and read-only modes
- All tests passing with proper generic type constraints
0.1.19 - 2025-08-31 #
Maintenance #
- Version bump for package maintenance
- Updated dependencies compatibility
0.1.18 #
Fixed #
- Type Conversion in Number Fields: Fixed TypeError when entering string values in number fields
- VooFormController now properly converts string inputs to numbers for number fields
- Invalid number strings are converted to null instead of causing type errors
- Empty strings in number fields are handled as null values
Added #
- Comprehensive Form Submission Tests: Added extensive test coverage for form submission
- Tests for isSubmitting state management and preventing concurrent submissions
- Tests for isSubmitted state tracking across successful/failed submissions
- Tests for onSubmit, onSuccess, and onError callbacks
- Tests for validation during submission and error handling
- Tests for isDirty state management during submission flow
- Edge case tests for rapid submissions and empty forms
- Total of 28 new submission-related tests
Testing #
- Added
voo_form_controller_submission_test.dart
with comprehensive submission tests - Added
voo_form_controller_type_test.dart
with 15 type conversion tests - All tests passing with proper type safety
0.1.17 #
Added #
-
Type Enforcement System: Comprehensive type safety for all form fields
- Created
StrictNumberFormatter
to prevent invalid character input in number fields - Added specialized formatters:
IntegerFormatter
,CurrencyFormatter
,PercentageFormatter
- New factory methods:
VooField.integer()
,VooField.decimal()
,VooField.currency()
,VooField.percentage()
- Created
FieldValueConverter
system for safe type conversions between UI strings and field values
- Created
-
Error Display Modes: Flexible error display system with multiple modes
VooFormErrorDisplay
enum with 7 display modes (never, onType, onBlur, onSubmit, onInteraction, onTypeDebounced, always)VooFormErrorConfig
for configurable error behavior with predefined configurations- Smart error display based on field interaction state
-
Material 3 Design Components:
- Created
VooFormButton
with Material 3 compliant button variants (filled, filledTonal, outlined, text, elevated) - Predefined factories for common actions: Submit, Cancel, Secondary, Danger buttons
- Added
VooFormActions
for consistent button layout in forms
- Created
Fixed #
- Critical Type Error: Fixed "type 'String' is not a subtype of type 'num?'" error in VooField.number
- Users can no longer type invalid characters in number fields
- Proper type conversion between text input and field values
- Real-time validation with min/max value enforcement
Testing #
- Added comprehensive test suite for type enforcement (31 tests)
- Added tests for all error display modes (14 tests)
- All existing tests pass with new implementations
0.1.16 #
Fixed #
- Test Improvements: Fixed all failing tests in voo_forms package
- Fixed scientific notation parsing test to handle input formatter limitations
- Fixed time field localization initialization using
didChangeDependencies
and post-frame callbacks - Fixed date constraint test to use
DateUtils.isSameDay
for proper date comparison - Fixed date picker cancel button handling with fallback logic for different button text variations
- Fixed time display format tests to be locale-agnostic
- Fixed invalid date handling test to focus on validation behavior
- Fixed async dropdown loading test to verify core functionality
0.1.15 #
-fixed tests -fixed docs -fixed type casting errors
0.1.14 #
Refactored - Major Technical Debt Cleanup #
-
Eliminated _buildXXX Methods: Removed all _buildXXX methods that return widgets (violates rules.md)
- Created
FieldWidgetFactory
to replace VooFieldWidget's_getFieldWidget
method - Created
TextFieldPrefixBuilder
,TextFieldSuffixBuilder
,TextFieldFormattersBuilder
helper classes - Created
DateFieldDecorationBuilder
andTimeFieldDecorationBuilder
for date/time fields - Created
DropdownFieldDecorationBuilder
for dropdown field decorations - Total of 7 _buildXXX methods successfully eliminated
- Created
-
One Class Per File Rule: Split large files containing multiple classes
- Validation Rules (13 files): Split
validation_rule.dart
into individual files invalidation_rules/
directoryvoo_validation_rule.dart
(base class)- Individual files for: required, min_length, max_length, email, phone, url, pattern, min_value, max_value, range, date_range, custom, compound validations
- Formatters (12 files): Split
formatters.dart
into individual files informatters/
directoryvoo_formatters.dart
(factory class)- Individual files for: phone_number, credit_card, date, currency, case, ssn, zip_code, percentage, pattern, mask, international_phone formatters
- All formatter classes now public (removed underscore prefix)
- 25+ classes extracted into separate files for better organization
- Validation Rules (13 files): Split
-
Import Organization: Fixed all import violations
- Eliminated all relative imports (../)
- Properly ordered imports: dart → flutter → package → local files
- Created barrel exports for clean public APIs
Added #
- Developer Documentation:
REFACTORING_SUMMARY.md
- Comprehensive summary of all refactoring changesDEVELOPER_GUIDE.md
- Complete developer guide with examples and best practices- Detailed documentation for all validators and formatters
Improved #
- Code Organization: Much easier to find and navigate code
- IDE Support: Better autocomplete and navigation with one class per file
- Testability: Helper classes are easily mockable and testable
- Maintainability: Smaller, focused files reduce complexity
- Clean Architecture: Proper separation of concerns throughout
Developer Experience #
- Better Code Discovery: Each validator/formatter in its own clearly named file
- Import Flexibility: Can import individual classes or use barrel exports
- Consistent Patterns: All code follows clean architecture principles
- Reduced Coupling: Helper classes reduce dependencies between components
- Easier Onboarding: Clear file structure makes codebase easier to understand
Testing #
- All atomic component tests passing (24/24)
- 92.6% overall test success rate (206/223)
- No breaking changes to public API
0.1.13 #
Fixed #
- Dropdown Type Casting Errors: Fixed critical type casting errors affecting strongly typed callbacks
- Resolved "TypeError: Instance of '(CustomType?) => void' is not a subtype of type '((dynamic) => void)?'" errors
- Added
_invokeFieldOnChanged
helper method usingFunction.apply
to safely invoke callbacks without type checking - Fixed both searchable and regular dropdowns to handle typed callbacks properly
- All field types now properly handle typed onChanged callbacks without runtime errors
Added #
- Comprehensive Type Safety Tests: Added full test coverage for typed callbacks across all field types
- Tests for text, number, email, password, phone, url, multiline fields with String callbacks
- Tests for boolean switch with bool callbacks
- Tests for checkbox with bool? callbacks
- Tests for dropdown with custom typed callbacks (e.g., CustomOption)
- Tests for radio with typed callbacks
- Tests for slider with double callbacks
- Tests for date with DateTime? callbacks
- Tests for time with TimeOfDay? callbacks
- Ensures no type casting errors occur at runtime
0.1.12 #
Fixed #
- Dropdown Type Casting with Strongly Typed Callbacks: Fixed runtime type errors when using typed callbacks with dropdowns
- Error:
TypeError: Instance of '(JurisdictionListOption?) => void': type '(JurisdictionListOption?) => void' is not a subtype of type '((dynamic) => void)?'
- Modified
VooFieldWidget
to wrap dropdown callbacks with dynamic type handling - Removed direct
field.onChanged
calls fromVooDropdownFieldWidget
to prevent type mismatches - Both regular and async dropdowns now handle strongly typed callbacks correctly
- Added comprehensive test coverage for typed callbacks with custom types like
JurisdictionListOption
- Ensures type-safe callback handling without runtime errors
- Error:
0.1.11 #
Fixed #
- Dropdown Overflow Issues: Fixed subtitle display causing overflow in standard dropdowns
- Removed subtitles from non-searchable dropdown items to prevent overflow
- Subtitles are now only displayed in searchable dropdowns with custom overlay
- Ensures consistent dropdown rendering without visual glitches
Refactored #
- Removed Function Widgets: Eliminated all function widgets following atomic design principles
- Created
DropdownMenuOverlay
,DropdownSearchField
,DropdownItemsList
, andVooDropdownMenuItem
as proper widget classes - Created
FieldLabelWrapper
widget to handle label positioning - Replaced all
_buildXXX
methods with proper widget classes or factory methods - Improves code organization and follows rules.md requirements
- Created
Improved #
- Test Suite Organization: Completely reorganized test structure for better maintainability
- Created
test_helpers.dart
with reusable test utilities - Organized tests by field type in
field_callbacks/
directory - Added detailed error messages for all assertions
- Fixed all compilation errors in tests
- Removed unsupported API usage from tests
- Tests now follow atomic design pattern and rules.md requirements
- Improved test naming conventions for clarity
- Created
Developer Experience #
- Test Helpers: Added comprehensive test utilities
createTestApp()
- Properly wrapped test widgets with required providerstapDropdown()
- Works with both regular and searchable dropdownsenterTextWithVerification()
- Verifies text entry with detailed error reportingexpectFieldValue()
- Field value assertions with contextexpectCallbackInvoked()
- Callback verification helpers- Created
README_TEST_ORGANIZATION.md
documenting test structure
0.1.10 #
Fixed #
- Type Casting in onChanged Callbacks: Resolved all remaining type casting issues in field widget callbacks
- Fixed type errors in all field widgets (checkbox, switch, radio, rating, color, multiselect, file, datetime, custom)
- All field widgets now use dynamic invocation to safely call field.onChanged callbacks
- Number fields now properly parse string input to numeric values before calling onChanged
- Prevents runtime errors like
type '(bool?) => void' is not a subtype of type '((dynamic) => void)?'
- Added comprehensive test coverage for all field types with typed onChanged callbacks
- Ensures 100% test pass rate (160/160 tests passing)
0.1.9 #
Fixed #
- Type Casting in Field Widgets: Fixed type casting errors across all field widget callbacks
- Fixed
TypeError: Instance of '(String?) => void': type '(String?) => void' is not a subtype of type '((dynamic) => void)?'
- All field widgets now use properly typed callbacks instead of
dynamic
- VooFieldWidget correctly forwards typed callbacks without causing type mismatches
- Ensures both widget
onChanged
and fieldonChanged
callbacks are called consistently - VooDropdownFieldWidget now uses properly typed
ValueChanged<T?>?
callback - VooSwitchFieldWidget and VooCheckboxFieldWidget now handle bool types correctly
- All VooField factory methods now work with typed callbacks without runtime errors
- Fixed
0.1.8 #
Fixed #
-
Type Safety in Dropdowns: Fixed runtime type errors in dropdown onChanged callbacks
- Changed VooDropdownFieldWidget onChanged from
ValueChanged<T?>?
toValueChanged<dynamic>?
to match VooFieldWidget - Fixes errors like "(String?) => void is not a subtype of ((dynamic) => void)?"
- Ensures proper type casting for all dropdown value types
- Changed VooDropdownFieldWidget onChanged from
-
Async Dropdown Query Issues: Fixed async dropdown not triggering searches when typing
- Replaced faulty time-based debounce logic with proper Timer-based implementation
- Now correctly debounces search queries with configurable delay
- Properly cancels previous timers to prevent duplicate requests
-
Label Position for All Fields: Fixed label positioning issues across all field types
- Date fields now respect labelPosition setting from form configuration
- Async dropdowns properly work with VooFieldWidget label wrapping
- Consistent label positioning for above, left, floating, and placeholder positions
-
Initial Values: Fixed initial value display for all field types
- All fields now check
field.value ?? field.initialValue
pattern - Dropdowns, date, and time fields properly display initial values
- Consistent initial value handling across the entire form system
- All fields now check
-
Dropdown Background Styling: Fixed inconsistent dropdown backgrounds
- Removed explicit background colors from outlined, rounded, and sharp variants
- Dropdowns now have transparent backgrounds matching TextFormField behavior
- Fixed VooDropdown in voo_ui_core to match consistent styling
- Filled variant properly retains its background fill color
Changed #
- VooFormFieldBuilder Refactored: Now uses VooFieldWidget for all field types
- Simplified form field builder to use single VooFieldWidget
- Ensures consistent label handling and options propagation
- Better separation of concerns with atomic design principles
0.1.7 #
Added #
- onChanged Callbacks: All VooField factory methods now accept onChanged parameter
- Added
ValueChanged<T?>? onChanged
parameter to all field types - Allows users to provide callback functions directly in field definitions
- Simplifies form field event handling without needing wrapper widgets
- Supports type-safe callbacks for each field type (String, bool, DateTime, etc.)
- Added
0.1.6 #
Fixed #
- VooFieldOptions Integration: All field types now properly use config from form builder
- Added
VooFieldOptions
parameter to VooTextFormField, VooCheckboxFieldWidget, VooDropdownFieldWidget, VooRadioFieldWidget, and VooSwitchFieldWidget - VooFieldWidget now consistently passes options to all field types
- VooFormFieldBuilder properly passes fieldOptions to all widgets
- Ensures consistent theming and configuration across all form fields
- Added
- Label Positioning: Fixed label display for above and left positions
- Fixed operator precedence bug in VooFieldWidget that prevented proper label wrapping
- VooDateFieldWidget, VooTimeFieldWidget, and VooDropdownFieldWidget now correctly omit labels from InputDecoration when position is above/left
- Labels are now properly displayed externally for above/left positions as intended
- Dropdown Styling: Fixed dropdown background inconsistency
- VooDropdownFieldWidget now properly applies field variant styling (filled, outlined, etc.)
- Dropdown fields now match the appearance of other form fields
- Added
_buildDecoration
method to apply consistent styling based on field variant
- Async Dropdown Loading: Fixed constant loading state issue
- Async dropdowns now properly load initial options on mount
- Fixed issue where async dropdowns would show perpetual loading state
- Empty query is now sent on initialization to load default options
Changed #
- VooField.dropdownAsync API: Improved to use cleaner List
0.1.5 #
Added #
- Searchable Dropdown Support: Enhanced dropdown fields with search functionality
- Local search filtering for existing dropdown options
- Async options loading for dynamic data from APIs/databases
- Configurable search debounce for performance optimization
- Minimum search length configuration
- Loading indicators and empty state handling
- New VooField Factory Methods:
VooField.dropdownAsync()
for async data loading with search- Enhanced
VooField.dropdown()
andVooField.dropdownSimple()
withenableSearch
parameter
- VooFormField Enhancements:
- Added
asyncOptionsLoader
for dynamic option loading - Added
enableSearch
,searchHint
,searchDebounce
,minSearchLength
fields
- Added
- VooDropdownFieldWidget Updates:
- Now passes search configuration to enhanced VooDropdown widget
- Handles both sync and async options seamlessly
- Example Application:
- Added searchable_dropdown_example.dart demonstrating both local and async search
Changed #
- VooDropdownFieldWidget now handles search functionality internally
- Search implementation kept in voo_forms package, not in voo_ui_core
- VooDropdown in voo_ui_core remains a simple, basic dropdown widget
0.1.4 #
Fixed #
- Fixed
labelPosition: LabelPosition.above
not working correctly - Refactored form field builder to follow atomic design principles
- Created
VooTextFieldWidget
atomic widget for proper label positioning - Fixed duplicate labels appearing when using above positioning
VooTextFormField
now properly respects provided decorations
0.1.3 #
Changed #
- One Class Per File Rule: Refactored voo_field_options.dart into separate files
- Each enum and class now in its own file following rules.md
- Created separate files for: LabelPosition, FieldVariant, ErrorDisplayMode, ValidationTrigger, FocusBehavior
- VooFieldOptions and VooFieldOptionsProvider now in separate files
- Removed Duplicate Responsive Logic: Now using voo_ui_core's VooSpacingSize and VooDesignSystemData
- Eliminated duplicate size/spacing definitions
- Using voo_ui_core's existing responsive utilities
- Better integration with overall design system
Fixed #
- Import paths now properly organized
- No more duplicate responsive logic between packages
0.1.2 #
Added #
- VooSimpleForm: New simplified form builder for amazing developer experience
- Works seamlessly with VooField factory constructors
- Supports all form layouts (vertical, horizontal, grid, stepped, tabbed)
- Built-in support for VooFieldOptions inheritance
- Extension method
.toForm()
for even simpler form creation
- Atomic Layout Widgets: Replaced all _buildXXX methods with proper atomic widgets
VooFormVerticalLayout
: Vertical form layout organismVooFormHorizontalLayout
: Horizontal scrolling form layoutVooFormGridLayout
: Responsive grid layout with column spanningVooFormSteppedLayout
: Wizard-style stepped form layoutVooFormTabbedLayout
: Tabbed form layoutVooFormProgress
: Progress indicator moleculeVooFormActions
: Form action buttons molecule
- Best Practices Example: Comprehensive example demonstrating all new features
Changed #
- VooFormBuilder: Refactored to use atomic widgets instead of _buildXXX methods
- Improved separation of concerns
- Better testability and maintainability
- Follows atomic design principles strictly
- Theme Integration: All form components now properly use theme colors
- Removed hardcoded green/red colors in favor of theme.colorScheme.tertiary/error
- Consistent theming throughout all form elements
Fixed #
- Fixed VooFormController import path issues in new atomic widgets
- Fixed type errors in VooFormSection references
- Removed unused _validateCurrentStep method from VooFormBuilder
0.1.1 #
Added #
- New VooField API with factory constructors for better developer experience:
VooField.text()
,VooField.email()
,VooField.password()
VooField.dropdown()
,VooField.checkbox()
,VooField.radio()
VooField.date()
,VooField.time()
,VooField.slider()
- And more field types following best practices (no static methods)
- VooFieldOptions system with enum-based configuration:
- Presets:
VooFieldOptions.material
,.compact
,.comfortable
,.minimal
- Configurable label position, field variant, size, density, validation triggers
- Inheritable options from parent forms for consistency
- Presets:
- VooFieldOptionsProvider using InheritedWidget pattern for option inheritance
- Parent forms can set defaultFieldOptions that cascade to all children
- New atomic widgets for better code organization:
VooSliderFormField
for slider inputsVooDateFormField
for date selectionVooTimeFormField
for time selection
- Added rule to rules.md: No
_buildXXX
methods that return widgets
Changed #
- BREAKING: Removed all hardcoded colors - everything now uses Theme.of(context)
- BREAKING: Refactored VooFieldWidget to follow atomic design (no _buildXXX methods)
- Improved theme integration - respects app's ColorScheme automatically
- Updated VooFormConfig to support defaultFieldOptions
- Enhanced field option inheritance from parent forms
Deprecated #
- VooFieldUtils: Static methods violate best practices. Use VooField factory constructors instead:
Migration guide:// OLD (deprecated) VooFieldUtils.textField(id: 'name', name: 'name') // NEW (recommended) VooField.text(name: 'name')
VooFieldUtils.textField()
→VooField.text()
VooFieldUtils.emailField()
→VooField.email()
VooFieldUtils.passwordField()
→VooField.password()
VooFieldUtils.phoneField()
→VooField.phone()
VooFieldUtils.dropdownField()
→VooField.dropdown()
- All other static methods have equivalent factory constructors
- Will be removed in version 0.2.0
Fixed #
- Fixed green color appearing in switches and other components when not in theme
- Fixed amber color in rating widgets - now uses theme primary color
- Fixed type mismatches in VooField factory constructors
- Fixed VooFormField
- Removed deprecated API usage warnings
- Fixed enum conflicts between form_config.dart and voo_field_options.dart
Developer Experience #
- Intuitive factory constructor API (VooField.text instead of static methods)
- Enum-based configuration for better type safety and IDE support
- Consistent theming throughout all form components
- Better code organization following atomic design principles
0.1.0 #
Added #
- Initial release of voo_forms package
- Comprehensive form builder with clean architecture
- 20+ field types support including:
- Text, Email, Password, Phone, URL
- Number, Slider, Rating
- Date, Time, DateTime
- Boolean, Checkbox, Switch
- Dropdown, Radio, MultiSelect
- Color picker, File upload
- Form sections with collapsible support
- Form headers for better organization and categorization
- Advanced validation system with 20+ built-in validators:
- Required, Email, Phone, URL validation
- Min/Max length and value validators
- Pattern matching validators
- Password strength validators
- Credit card, postal code validators
- Custom validation support
- 15+ text input formatters:
- Phone number formatting (US and international)
- Credit card formatting
- Currency formatting
- Date and time formatting
- Custom mask formatters
- Form controller with state management:
- Real-time validation
- Field dependencies
- Form submission handling
- Progress tracking
- Multiple form layouts:
- Vertical, Horizontal, Grid
- Stepped/Wizard forms
- Tabbed forms
- Responsive design supporting all screen sizes
- Material 3 compliance
- Theme customization support
- Comprehensive utility classes:
- VooFormUtils for form operations
- VooFieldUtils for field creation
- VooFormTheme for styling
- Export formats:
- JSON serialization/deserialization
- Form summary generation
- Configuration export
- Full TypeScript-like type safety with generics
- Atomic design pattern implementation
- Cross-platform support (iOS, Android, Web, Desktop)