infinite_grouped_list 1.4.0
infinite_grouped_list: ^1.4.0 copied to clipboard
Dynamic scrolling list in Flutter, efficiently grouping items and seamlessly loading more data as user scrolls
1.4.0 #
Added #
- Expanded package-level test coverage across pagination, refresh, reactive loading, anchoring, helper classes, and empty/error states.
- Added
maxRetriestojumpToGroup(loadUntilFound: true)so callers can cap extra page loads explicitly.
Changed #
- Moved tooling packages out of runtime dependencies.
Fixed #
- Fixed controller rebinding and external
ScrollControllerownership so parent-managed controllers are no longer disposed by the widget. - Prevented duplicate reactive
onLoadMoreTriggereddispatches while a reactive load is already pending. - Stopped
jumpToGroup(loadUntilFound: true)from retrying forever after load failures.- There is also optional
maxRetriesparameter to cap the extra page loads defaulting to3.
- There is also optional
Breaking Changes #
- Removed the misspelled
seperatorBuilderAPI. UseseparatorBuilder.
1.3.1 #
Added #
- Added optional
enableAnchoringplusInfiniteGroupedListController.jumpToGroupso apps can programmatically snap to any group header, such as "Today".
Fixed #
- Replaced an invalid
Spacerusage in the example app'sListView, eliminating theParentDataWidgetassertion and keeping the showcase aligned with the package API.
1.3.0 #
Added #
- Added
InfiniteGroupedList.reactive()for reactive state management patterns. - Added
InfiniteGroupedList.reactiveGrid()for grid layouts with reactive patterns. - Added external state support through
items,isLoading,hasReachedMax, anderror. - Added a comprehensive reactive BLoC example with mock API, error handling, and loading states.
Changed #
- Improved controller behavior so it adapts automatically to reactive versus imperative mode.
- Added safety guards so controller mutation methods throw helpful errors in reactive mode.
- Improved lifecycle handling so reactive widgets update when external state changes through
didUpdateWidget. - Optimized reactive data handling to avoid unnecessary rebuilds.
- Expanded the example app with richer navigation, more polished UI, and clearer pattern comparison.
- Improved the documentation with more complete usage guidance and architectural examples.
Breaking Changes #
- None.
1.2.10 #
Added #
- Added
scrollControllerto all constructors so callers can provide their own scroll controller.
1.2.9 #
Added #
- Added helper methods for group management:
_sortSingleGroup,_addItemsToGroups, and_createInitialGroups.
Changed #
- Optimized group operations with targeted updates instead of full regrouping.
- Reduced memory usage by avoiding unnecessary data structure recreation.
- Implemented more efficient item addition with selective group updates.
- Optimized item removal with targeted group processing.
- Improved refresh operation efficiency.
Fixed #
- Fixed potential memory leaks by properly clearing controller callbacks.
- Improved scroll performance for large datasets.
- Improved handling of empty groups after item removal.
1.2.7 #
1.2.6 #
Added #
- Added
limittoInfiniteGroupedListControllerto define the expected page size from remote calls. - Added
onNoMoreItemsFound, which is triggered when the response contains fewer items than the configuredlimit.
1.2.0 #
Added #
- Added the
physicsparameter. It defaults toAlwaysScrollablePhysics.
Changed #
- Tweaked
initialItemsErrorWidgetandloadMoreItemsErrorWidget. They now accept the error and return aWidget.
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,
),
),
),
Breaking Changes #
initialItemsErrorWidgetandloadMoreItemsErrorWidgetnow receive the error and must return a widget.
