voo_data_grid 0.5.5
voo_data_grid: ^0.5.5 copied to clipboard
A powerful and flexible data grid widget for Flutter with sorting, filtering, pagination, and remote data support
0.5.5 #
- OData v4 Industry Standard Compliance
- Enhanced OData implementation to be fully OData v4 compliant, matching .NET/Entity Framework Core standards
- Added support for all OData v4 query options:
$count- Get total count of results with response$select- Select specific fields to return$expand- Include related entities (navigation properties)$search- Full-text search across searchable fields$format- Specify response format (json, xml, etc.)$compute- Define calculated properties$apply- Apply aggregations and transformations
- Implemented proper OData v4 value formatting:
- Single quotes properly escaped by doubling (OData v4 spec)
- DateTime values formatted in ISO 8601 UTC format
- Numeric and boolean values without quotes
- Null value handling per specification
- Added advanced OData operators:
inoperator for collection membershipnotoperator for negation (e.g.,not contains())- Proper parenthetical grouping for complex expressions
- Introduced OData-specific response parsing:
parseODataResponse()- Parse standard OData v4 responsesextractODataMetadata()- Extract @odata annotationsparseODataError()- Handle OData error responses
- Added configurable logical operators (AND/OR) for filter combination
- Full compatibility with ASP.NET Core OData endpoints
- Comprehensive test suite validating OData v4 compliance
0.5.4 #
- Code Quality Improvements
- Applied linter suggestions across the codebase
- Improved code formatting and readability
- Minor optimizations and cleanup
0.5.3 #
- Bug Fixes
-
Fixed Generic Type Parameter Propagation in Filter Row
- Fixed type mismatch error that occurred when clicking on filters with typed controllers
- Added missing generic type parameters to all filter-related methods in
VooDataGridFilterRow - Methods updated:
_buildFilterInput,_buildTextFilter,_buildNumberFilter,_buildNumberRangeFilter,_buildDateFilter,_buildDateRangeFilter,_buildDropdownFilter,_buildMultiSelectFilter,_buildCheckboxFilter,_getFilterOptions, and_applyFilter - This ensures proper type safety when using typed controllers like
VooDataGridController<OrderList> - Users no longer need to explicitly add type parameters to columns when using typed controllers
-
Improved VooApiStandard Number Range Filtering
- Enhanced handling of between operator to properly handle null min/max values
- Now only creates GreaterThanOrEqual filter when minimum value is not null
- Only creates LessThanOrEqual filter when maximum value is not null
- Allows filtering with just a minimum or just a maximum value
-
VooApiStandard Field Name PascalCase
- Fixed field names to use PascalCase after the prefix in VooApiStandard
- When using fieldPrefix='Site' with field='siteNumber', it now correctly generates 'Site.SiteNumber' (not 'Site.siteNumber')
- This ensures compatibility with backend APIs expecting PascalCase field names
- Other API standards continue to use the field name as-is without case changes
-
0.5.2 #
-
Bug Fixes & Improvements
-
Fixed Generic Type Propagation: Fixed missing generic type parameters in widget tree
- Added generic type parameter
<T>toVooDataGridFilterRow,VooDataGridHeader, andVooDataGridRowwidget instantiations - This fixes the type mismatch error when clicking on filters with typed controllers
- Ensures proper type safety throughout the widget hierarchy
- Added generic type parameter
-
Enhanced Error Handling: Added comprehensive error handling for valueGetter functions
- Added try-catch blocks around valueGetter calls to prevent crashes
- Improved error logging with detailed type information for debugging
- Better error messages when valueGetter is missing for typed objects
- Graceful fallback to null values on errors instead of crashing
-
VooApiStandard Number Range Fix: Fixed number range filtering for Voo API Standard
- Number ranges now correctly use GreaterThanOrEqual and LessThanOrEqual operators
- Removed unsupported 'Between' operator from Voo API Standard
- Creates two separate filters for range queries as expected by the API
- Example: Site.siteNumber between 0 and 100 now sends:
{fieldName: 'Site.siteNumber', value: 0, operator: 'GreaterThanOrEqual'}{fieldName: 'Site.siteNumber', value: 100, operator: 'LessThanOrEqual'}
-
Filter Visibility During Errors: Fixed filters disappearing when data loading fails
- Headers and filter row now remain visible even when there's an error
- Users can adjust filters and retry without losing their filter state
- Error message appears in the data area while preserving the grid structure
- Improves user experience by maintaining context during error states
-
-
Developer Experience
- Added detailed debug logging for type mismatches
- Created comprehensive error handling tests
- Better documentation of type safety requirements
- Clearer error messages to help developers debug issues
-
Testing
- Added
error_handling_test.dartwith comprehensive type safety tests - Tests for typed valueGetter functions with various data types
- Tests for null safety and error recovery
- Verification that grid doesn't crash on type mismatches
- Added
0.5.1 #
-
New Feature: Field Prefix Support for Nested Properties
- Added
fieldPrefixproperty toVooDataGridControllerfor automatic field name prefixing - Added
fieldPrefixparameter toDataGridRequestBuilderfor API request formatting - Supports nested property filtering like "Site.SiteNumber", "Client.CompanyName"
- Works with all API standards (Voo, Simple, JSON:API, OData, MongoDB, GraphQL, Custom)
- Enables cleaner column definitions while maintaining proper API field names
- Added
-
New Feature: Action Columns and Clickable Cells
- Added
excludeFromApiproperty to exclude columns from API requests (useful for action columns) - Added
onCellTapcallback for making cells clickable - Updated filter row to skip columns with
excludeFromApiflag - Updated header to prevent sorting on excluded columns
- Added InkWell wrapper for cells with onCellTap callback
- Added
-
Use Cases
- Nested properties:
Site.SiteNumber,Client.CompanyName,Order.Status - Action buttons (edit, delete, view) that shouldn't be sent to API
- Clickable cells for quick actions
- Local-only columns that don't exist in the backend
- Nested properties:
-
Examples
nested_field_example.dart: Demonstrates field prefix usageaction_buttons_example.dart: Shows action columns with edit/delete/view buttons
-
Testing
- Added tests for field prefix functionality
- Added tests for excludeFromApi and onCellTap features
- All existing tests pass without modifications
0.5.0 #
-
Major Feature: Generic Type Support
- VooDataGrid components now support generic type parameters for compile-time type safety
VooDataGridController<T>,VooDataGridSource<T>, andVooDataColumn<T>are now genericVooDataGrid<T>,VooDataGridHeader<T>,VooDataGridRow<T>, andVooDataGridFilterRow<T>widgets are now generic- Eliminates need for runtime type casting in
valueGetterfunctions - Provides full IntelliSense and type checking for row data
-
Type Safety Improvements
valueGetterin VooDataColumn now has proper type signature:dynamic Function(T row)cellBuildercallback now receives properly typed row:Widget Function(BuildContext, dynamic value, T row)onRowTapandonRowDoubleTapcallbacks now receive typed data:void Function(T row)cardBuilderfor mobile layout now has type safety:Widget Function(BuildContext, T row, int index)
-
Developer Experience
- No more casting needed in valueGetter:
(row) => row.orderIdinstead of(row) => (row as OrderModel).orderId - Better IDE support with autocomplete and error detection
- Cleaner, more maintainable code with compile-time type checking
- Backward compatible - can still use
dynamicfor untyped/Map data
- No more casting needed in valueGetter:
-
Example Updates
- Updated VooDataGridTypedObjectsPreview to demonstrate generic usage
- Simplified valueGetter implementations without type casting
- Added comments highlighting type safety benefits
0.4.0 #
-
Breaking Changes
- VooDataGrid now requires
valueGetterfunction for typed objects (non-Map data) - DataGridRequestBuilder now returns structured responses with 'params', 'body', or 'variables' keys
- VooDataGrid now requires
-
Major Features
- Full support for typed objects in VooDataGrid
- Added required
valueGetterparameter in VooDataColumn for typed objects - Created comprehensive typed objects preview and documentation
- Fixed dynamic property access errors for custom model classes
- Added required
- Enhanced API standards support
- Fixed MongoDB operator handling for equals operator
- Fixed GraphQL filter operators structure
- Fixed OData numeric value formatting (no quotes for numbers)
- Fixed JSON:API 1-based pagination
- Full support for typed objects in VooDataGrid
-
Bug Fixes
- Fixed critical "Dynamic call failed" error when using typed objects like OrderList
- Fixed ScrollController disposal issues causing test failures
- Resolved checkbox selection handling in data grid rows
- Fixed row tap and double tap callback handling
- Corrected alternating row colors initialization
-
Test Improvements
- Added comprehensive typed objects test suite
- Fixed test infrastructure and dependency resolution
- Improved test coverage from 87% to 98%
- Added proper test data initialization
-
Documentation
- Added clear instructions for using typed objects with VooDataGrid
- Created VooDataGridTypedObjectsPreview example
- Updated README with valueGetter requirements and examples
- Added warning messages for missing valueGetter functions
0.3.1 #
-
Bug Fixes
- Fixed ScrollController multiple positions error when using horizontal scrolling
- Resolved horizontal scrollbar positioning to appear at bottom of grid instead of right side
- Fixed horizontal scrollbar accessibility - now always visible at bottom of viewport without requiring vertical scroll
-
Filter Enhancements
- Enhanced Advanced Filters preview with comprehensive filter types:
- DateTime filters with date picker widgets
- Numeric range filters for min/max values
- Dropdown filters with icon support
- Boolean checkbox filters
- Text search filters with proper hints
- Added
FilterTypeExtensionsfor cleaner code organization - Improved filter type handling with proper operators and input widgets per type
- Enhanced Advanced Filters preview with comprehensive filter types:
-
UX Improvements
- Horizontal scrollbar now fixed at bottom of grid viewport for better accessibility
- Removed scrollbar from header to prevent duplicate scrollbar issues
- Improved scrollbar positioning following UI/UX best practices
- Stack-based layout for optimal scrollbar visibility
-
Code Quality
- Refactored filter system with enum extensions for better maintainability
- Fixed DateTime handling in DateFilter models
- Improved type safety in filter request builders
0.3.0 #
-
BREAKING CHANGES
- Renamed
StandardApiRequestBuildertoDataGridRequestBuilder - Integrated API standards directly into
DataGridRequestBuilderfor better architecture - Moved preview files from
/previewto/lib/previewdirectory
- Renamed
-
API Standards Support
- Integrated
ApiFilterStandardenum directly intoDataGridRequestBuilder - Support for 6 different API standards: Simple REST, JSON:API, OData, MongoDB/Elasticsearch, GraphQL, and Custom
- Instance-based configuration allows separate Dio instances with custom interceptors
- Each data source can have its own HTTP client with tokens and authentication
- Integrated
-
Advanced Filtering System
- Complex filters with secondary conditions (AND/OR logic)
- Multiple filter types: stringFilters, intFilters, dateFilters, decimalFilters
AdvancedFilterRequestmodel for complex filter requestsAdvancedRemoteDataSourcefor handling advanced filter formats- Full backward compatibility with legacy filter formats
-
Enhanced Request Builder
- New instance-based
DataGridRequestBuilderwith API standard configuration buildRequest()method adapts to selected API standard- Support for query parameters (GET) and request body (POST) formats
- Built-in URL encoding and special character handling for each standard
- Static methods maintained for backward compatibility
- New instance-based
-
Synchronized Horizontal Scrolling
- Fixed horizontal scrolling to work uniformly between header and body
SynchronizedScrollControllerfor coordinating scroll between components- Separate controllers for header and body synchronization
- Smooth scrolling experience across large datasets
-
Widget Previews
- Comprehensive data grid preview with 200+ rows and 15+ columns
- API standards configuration preview with live request viewer
- Advanced filtering demo with API request/response monitoring
- Empty state preview demonstrating proper header visibility
- Mock data generator for realistic testing scenarios
-
UI/UX Improvements
- Column headers remain visible even with no data
- Empty state message appears below headers
- Advanced filter widget with visual filter builders
- Filter preview and validation features
- Better responsive behavior for large datasets
-
Developer Experience
- Cleaner architecture with integrated API standards
- Better separation of concerns for HTTP clients
- Comprehensive examples for each API standard
- Improved documentation and code organization
0.2.0 #
- Empty State Improvements
- Column headers now remain visible even when there's no data
- Empty state message appears in the body area below headers
- Users can see the table structure even with no rows
- Advanced Filtering System
- Added support for complex filters with secondary conditions
- Implemented multiple filter types: string, int, date, decimal
- Added secondary filters with AND/OR logic operators
- Created
AdvancedFilterRequestmodel for complex filter requests - Added
AdvancedRemoteDataSourcefor handling advanced filter formats - Maintained full backward compatibility with legacy filter formats
- Filter UI Components
- Added
AdvancedFilterWidgetfor building complex filters via UI - Implemented filter field configuration system
- Added visual filter builders for each data type
- Created filter preview and validation features
- Added
- Synchronized Scrolling
- Fixed horizontal scrolling to work uniformly between header and body
- Implemented
SynchronizedScrollControllerfor scroll coordination - Added separate scroll controllers for header and body synchronization
- Enhanced Request Builder
- Added
buildAdvancedRequestBodymethod for complex filters - Implemented
convertToAdvancedRequestfor format conversion - Added support for API-specific operator formatting
- Added
- Documentation & Examples
- Added comprehensive example app with advanced filtering demos
- Updated README with advanced filtering documentation
- Added multiple filter request/response examples
0.1.0 #
- Enhanced data grid with multiple API filtering standards support
- Added support for JSONAPI, REST, GraphQL, and OData filtering standards
- Improved sorting and filtering capabilities
- Added comprehensive pagination support
- Enhanced remote data loading with customizable data sources
- Added selectable rows with checkbox support
- Improved column configuration and customization
- Added widget previews for testing and development
0.0.1 #
- Initial release of VooDataGrid
- Basic data grid implementation with sorting and filtering
- Column-based data display with customizable headers
- Local data source support