GroupedListView<H, I> constructor

GroupedListView<H, I>({
  1. Key? key,
  2. required List<I> items,
  3. HeaderBuilder<H>? headerBuilder,
  4. ItemsListBuilder<I>? itemsBuilder,
  5. required H itemGrouper(
    1. I item
    ),
  6. ItemsWithHeaderBuilder<H, I>? customBuilder,
  7. Comparator<H>? headerSorter,
  8. Axis scrollDirection = Axis.vertical,
  9. bool reverse = false,
  10. ScrollController? controller,
  11. bool? primary,
  12. ScrollPhysics? physics,
  13. bool shrinkWrap = true,
  14. EdgeInsetsGeometry? padding,
  15. bool addAutomaticKeepAlives = true,
  16. bool addRepaintBoundaries = true,
  17. bool addSemanticIndexes = true,
  18. double? cacheExtent,
  19. int? semanticChildCount,
  20. DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  21. ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
  22. String? restorationId,
  23. Clip clipBehavior = Clip.hardEdge,
  24. MainAxisAlignment itemsMainAxisAlignment = MainAxisAlignment.start,
  25. MainAxisSize itemsMainAxisSize = MainAxisSize.max,
  26. CrossAxisAlignment itemsCrossAxisAlignment = CrossAxisAlignment.center,
  27. TextDirection? itemsTextDirection,
  28. VerticalDirection itemsVerticalDirection = VerticalDirection.down,
  29. 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');
  }
}