GroupedListView<H, I>.list constructor
GroupedListView<H, I>.list ({
- Key? key,
- required List<
I> items, - required HeaderBuilder<
H> headerBuilder, - required Widget listItemBuilder(
- BuildContext context,
- int itemCountInGroup,
- int itemIndexInGroup,
- I item,
- int itemIndexInOriginalList,
- required H itemGrouper(
- I item
- Comparator<
H> ? headerSorter, - Axis scrollDirection = Axis.vertical,
- bool reverse = false,
- ScrollController? controller,
- bool? primary,
- ScrollPhysics? physics,
- bool shrinkWrap = true,
- EdgeInsetsGeometry? padding,
- bool addAutomaticKeepAlives = true,
- bool addRepaintBoundaries = true,
- bool addSemanticIndexes = true,
- double? cacheExtent,
- int? semanticChildCount,
- DragStartBehavior dragStartBehavior = DragStartBehavior.start,
- ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
- String? restorationId,
- Clip clipBehavior = Clip.hardEdge,
Created a GroupedListView with your List of I
displayed in a ListView
Using this constructor, you'll have to provide the listItemBuilder
which is a Function that helps build the the List of items.
Also, as by default, a ListView is used, you can customise it using all the parameters you need (see ListView's documentation)
Last but not least, if you do not provide a customBuilder, you can customise
the default Column used to display the H
headers and List of I
items.
All of the fields are prefixed by items
(itemsMainAxisAlignment, itemsMainAxisSize, ...)
Implementation
GroupedListView.list({
Key? key,
// GroupedListView params
required List<I> items,
required HeaderBuilder<H> headerBuilder,
required Widget Function(BuildContext context, int itemCountInGroup,
int itemIndexInGroup, I item, int itemIndexInOriginalList)
listItemBuilder,
required H Function(I item) itemGrouper,
Comparator<H>? headerSorter,
// Optional items for macro ListView
Axis scrollDirection = Axis.vertical,
bool reverse = false,
ScrollController? controller,
bool? primary,
ScrollPhysics? physics,
bool shrinkWrap = true,
EdgeInsetsGeometry? padding,
bool addAutomaticKeepAlives = true,
bool addRepaintBoundaries = true,
bool addSemanticIndexes = true,
double? cacheExtent,
int? semanticChildCount,
DragStartBehavior dragStartBehavior = DragStartBehavior.start,
ScrollViewKeyboardDismissBehavior keyboardDismissBehavior =
ScrollViewKeyboardDismissBehavior.manual,
String? restorationId,
Clip clipBehavior = Clip.hardEdge,
}) : this(
key: key,
// GroupedListView params
items: items,
headerBuilder: headerBuilder,
itemsBuilder: (context, List<IndexedItem> items) {
return ListView.builder(
scrollDirection: scrollDirection,
itemCount: items.length,
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, int index) => listItemBuilder(
context,
items.length,
index,
items[index].item,
items[index].indexInOriginalList,
),
);
},
itemGrouper: itemGrouper,
headerSorter: headerSorter,
// Optional items for macro ListView
scrollDirection: scrollDirection,
reverse: reverse,
controller: controller,
primary: primary,
physics: physics,
shrinkWrap: shrinkWrap,
padding: padding,
addAutomaticKeepAlives: addAutomaticKeepAlives,
addRepaintBoundaries: addRepaintBoundaries,
addSemanticIndexes: addSemanticIndexes,
cacheExtent: cacheExtent,
semanticChildCount: semanticChildCount,
dragStartBehavior: dragStartBehavior,
keyboardDismissBehavior: keyboardDismissBehavior,
restorationId: restorationId,
clipBehavior: clipBehavior,
);