infinite_grouped_list 1.3.1
infinite_grouped_list: ^1.3.1 copied to clipboard
Dynamic scrolling list in Flutter, efficiently grouping items and seamlessly loading more data as user scrolls
1.3.1 🩹 Anchoring & Example Fixes #
- ✨ Added optional
enableAnchoringplusInfiniteGroupedListController.jumpToGroupso apps can programmatically snap to any group header (e.g., "Today"). - 🛠️ Replaced an invalid
Spacerusage in the example app'sListView, eliminating theParentDataWidgetassertion and keeping the showcase aligned with the package API.
1.3.0 🚀 Reactive State Management Support #
Major Features
- ✨ NEW:
InfiniteGroupedList.reactive()constructor for reactive state management patterns - ✨ NEW:
InfiniteGroupedList.reactiveGrid()constructor for grid layouts with reactive patterns - 🔌 Full BLoC/Provider/Riverpod Integration: Clean separation between event triggering and data listening
- 🎯 Event-Driven Architecture:
onLoadMoreTriggeredcallback decouples data fetching from UI events - 📡 External State Support: Accepts
items,isLoading,hasReachedMax, anderrorfrom external state management
API Enhancements
- 🎛️ Smart Controller Behavior: Controller methods automatically adapt to reactive vs imperative mode
- 🚫 Safety Guards: Controller throws helpful errors when using imperative methods in reactive mode
- 🔄 Reactive Lifecycle: Automatic updates when external state changes via
didUpdateWidget - ⚡ Performance Optimized: Efficient reactive data handling without unnecessary rebuilds
Example Project Improvements
- 📱 Comprehensive BLoC Example: Full-featured reactive example with mock API, error handling, and loading states
- 🧭 Enhanced Navigation: Example selection screen with beautiful cards and proper navigation
- 🎨 Rich UI Components: Category-based grouping with colored icons, sticky headers, and animations
- 🔄 Refresh Patterns: Demonstrates both pull-to-refresh and manual refresh in reactive mode
Developer Experience
- 📚 Pattern Comparison: Side-by-side examples of imperative vs reactive patterns
- 🏗️ Clean Architecture: Examples follow modern Flutter architecture best practices
- 🎯 Real-world Simulation: Mock network calls, pagination limits, and error scenarios
- 💡 Clear Documentation: Comprehensive inline examples and usage patterns
Breaking Changes
- None! Fully backward compatible with existing imperative usage
1.2.11 ⬆️ Upgrade dependencies #
- Upgraded dependencies to the latest versions
1.2.10 #
- ✨ Added
scrollControllerto all constructors, you can now pass your own scroll controller
1.2.9 #
Performance Improvements
- ⚡ Optimized group operations with targeted updates instead of full regrouping
- 🧠 Reduced memory usage by avoiding unnecessary data structure recreation
- 🚀 Implemented efficient item addition with selective group updates
- 🗑️ Optimized item removal with targeted group processing
Bug Fixes
- 🔍 Fixed potential memory leaks by properly clearing controller callbacks
- 🎯 Improved scroll performance for large datasets
- 🔄 Enhanced refresh operation efficiency
API Improvements
- ✨ Added helper methods for group management (
_sortSingleGroup,_addItemsToGroups,_createInitialGroups) - 📊 Better handling of empty groups after item removal
1.2.8 🐛 Bug fixes #
- Fixes hashValues deprecated issues
1.2.7 ✨ New Features #
- Adds
addItemsmethod inInfiniteGroupedListController - Adds
removeWheremethod inInfiniteGroupedListController - Hides internal methods in
InfiniteGroupedListController
1.2.6 ✨ New Features #
- Adds a new
limitparameter inInfiniteGroupedListControllerto tell the library how much items are expected from the remote call - Adds a callback
onNoMoreItemsFoundthat is triggered when the response returns less items than the providedlimit
1.2.5 ♻️ Refactoring #
- Refactors
InfiniteGroupedListControllerto avoidLateInitializationErrors
1.2.4 🐛 Bug fixes #
- Adds missing
showRefreshIndicatorfrom default constructor
1.2.3 ✨ New Features #
- Adds
showRefreshIndicatorflag which defaults totrue
1.2.2 ✨ New Features #
- Adds missing
Key
1.2.1 ✨ New Features #
- Adds
remove(ItemType)method to the controller. You can now programmatically remove items from the list.
1.2.0 💥 Breaking changes #
- Tweaks
initialItemsErrorWidget&loadMoreItemsErrorWidgetparameters. They are now function that returns aWidget, exposing the error aswell :
initialItemsErrorWidget: (error) => GestureDetector(
child: Text(
error.toString(),
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.w500,
decoration: TextDecoration.underline,
decorationColor: Colors.blue,
color: Colors.blue,
),
),
),
loadMoreItemsErrorWidget: (error) => GestureDetector(
child: Text(
error.toString(),
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.w500,
decoration: TextDecoration.underline,
decorationColor: Colors.blue,
color: Colors.blue,
),
),
),
- Adds
physicsparameter. Defaults to [AlwaysScrollablePhysics]
1.1.2 #
- Initializes
getItemswith default empty List to avoidLateInitializationError - Internal code refactoring
1.1.1 #
- Internal code refactoring
1.1.0 ✨ New Features - Simplifies & Improves API #
- Adds new builder
InfiniteGroupedList.gridView. Define yourgridDelegateand customise it as you want.
- Fields made optional:
seperatorBuildersortGroupBy
- Removes the
paddingthat was not removed on previous version.
1.0.1 🐛 Bug fixes & API improvements #
- Removes
paddingparameter as it does not correspond to anything - Adds
isPagedparameter. If theonLoadMoreis not paged, everytime the same items will be added to the list when the list reaches at the bottom. Therefore, we should set theisPagedtofalseand after the initial fetch it will stop fetching the items. It defaults totrue - Checks if
mountedbefore setting state
1.0.0 🎉 Initial release #
- Initial release
