GroupedListView<H, I> constructor
GroupedListView<H, I> ({
- Key? key,
- required List<
I> items, - HeaderBuilder<
H> ? headerBuilder, - ItemsListBuilder<
I> ? itemsBuilder, - required H itemGrouper(
- I item
- ItemsWithHeaderBuilder<
H, I> ? customBuilder, - 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,
- MainAxisAlignment itemsMainAxisAlignment = MainAxisAlignment.start,
- MainAxisSize itemsMainAxisSize = MainAxisSize.max,
- CrossAxisAlignment itemsCrossAxisAlignment = CrossAxisAlignment.center,
- TextDirection? itemsTextDirection,
- VerticalDirection itemsVerticalDirection = VerticalDirection.down,
- TextBaseline? itemsTextBaseline,
Created a GroupedListView with all the customized parametes you want
Using this constructor, you'll have to provide the itemsBuilder which is a Function that helps build the the List of items.
Be aware, if you want to build a fully customized header + List item, you can provide a customBuilder, but if you do so, let headerBuilder and itemsBuilder to null.
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(
{Key? key,
// GroupedListView params
required this.items,
this.headerBuilder,
this.itemsBuilder,
required this.itemGrouper,
this.customBuilder,
this.headerSorter,
// ListView Params
this.scrollDirection = Axis.vertical,
this.reverse = false,
this.controller,
this.primary,
this.physics,
this.shrinkWrap = true,
this.padding,
this.addAutomaticKeepAlives = true,
this.addRepaintBoundaries = true,
this.addSemanticIndexes = true,
this.cacheExtent,
this.semanticChildCount,
this.dragStartBehavior = DragStartBehavior.start,
this.keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
this.restorationId,
this.clipBehavior = Clip.hardEdge,
// Column params (not compatible with customBuilder)
this.itemsMainAxisAlignment = MainAxisAlignment.start,
this.itemsMainAxisSize = MainAxisSize.max,
this.itemsCrossAxisAlignment = CrossAxisAlignment.center,
this.itemsTextDirection,
this.itemsVerticalDirection = VerticalDirection.down,
this.itemsTextBaseline})
: super(key: key) {
if (customBuilder != null &&
(headerBuilder != null || itemsBuilder != null)) {
throw ArgumentError.value(customBuilder,
'If customBuilder is specified, you should not pass any headerBuilder or itemsBuilder');
} else if (customBuilder == null && headerBuilder == null) {
throw ArgumentError.value(headerBuilder,
'You must provide a non null headerBuilder as there is no customBuilder provided');
} else if (customBuilder == null && itemsBuilder == null) {
throw ArgumentError.value(itemsBuilder,
'You must provide a non null itemsBuilder as there is no customBuilder provided');
}
}