GroupedListView<H, I>.list constructor

GroupedListView<H, I>.list({
  1. Key? key,
  2. required List<I> items,
  3. required HeaderBuilder<H> headerBuilder,
  4. required Widget listItemBuilder(
    1. BuildContext context,
    2. int itemCountInGroup,
    3. int itemIndexInGroup,
    4. I item,
    5. int itemIndexInOriginalList,
    ),
  5. required H itemGrouper(
    1. I item
    ),
  6. Comparator<H>? headerSorter,
  7. Axis scrollDirection = Axis.vertical,
  8. bool reverse = false,
  9. ScrollController? controller,
  10. bool? primary,
  11. ScrollPhysics? physics,
  12. bool shrinkWrap = true,
  13. EdgeInsetsGeometry? padding,
  14. bool addAutomaticKeepAlives = true,
  15. bool addRepaintBoundaries = true,
  16. bool addSemanticIndexes = true,
  17. double? cacheExtent,
  18. int? semanticChildCount,
  19. DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  20. ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
  21. String? restorationId,
  22. 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,
      );