infinite_grouped_list 1.3.0
infinite_grouped_list: ^1.3.0 copied to clipboard
Dynamic scrolling list in Flutter, efficiently grouping items and seamlessly loading more data as user scrolls
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:
onLoadMoreTriggered
callback decouples data fetching from UI events - π‘ External State Support: Accepts
items
,isLoading
,hasReachedMax
, anderror
from 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
scrollController
to 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
addItems
method inInfiniteGroupedListController
- Adds
removeWhere
method inInfiniteGroupedListController
- Hides internal methods in
InfiniteGroupedListController
1.2.6 β¨ New Features #
- Adds a new
limit
parameter inInfiniteGroupedListController
to tell the library how much items are expected from the remote call - Adds a callback
onNoMoreItemsFound
that is triggered when the response returns less items than the providedlimit
1.2.5 β»οΈ Refactoring #
- Refactors
InfiniteGroupedListController
to avoidLateInitializationErrors
1.2.4 π Bug fixes #
- Adds missing
showRefreshIndicator
from default constructor
1.2.3 β¨ New Features #
- Adds
showRefreshIndicator
flag 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
&loadMoreItemsErrorWidget
parameters. 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
physics
parameter. Defaults to [AlwaysScrollablePhysics]
1.1.2 #
- Initializes
getItems
with 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 yourgridDelegate
and customise it as you want.

- Fields made optional:
seperatorBuilder
sortGroupBy
- Removes the
padding
that was not removed on previous version.
1.0.1 π Bug fixes & API improvements #
- Removes
padding
parameter as it does not correspond to anything - Adds
isPaged
parameter. If theonLoadMore
is not paged, everytime the same items will be added to the list when the list reaches at the bottom. Therefore, we should set theisPaged
tofalse
and after the initial fetch it will stop fetching the items. It defaults totrue
- Checks if
mounted
before setting state
1.0.0 π Initial release #
- Initial release