EnGridView<T> function

GridView EnGridView<T>({
  1. required List<T> items,
  2. required Widget itemView(
    1. ContextIndexItem<T>
    ),
  3. Key? key,
  4. Axis scrollDirection = Axis.vertical,
  5. bool reverse = false,
  6. ScrollController? controller,
  7. bool? primary,
  8. ScrollPhysics? physics,
  9. required bool shrinkWrap,
  10. EdgeInsetsGeometry? padding = const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
  11. int? columnCount,
  12. int? crossAxisCount,
  13. double crossAxisExtent = 80,
  14. double flexPercent = 0.2,
  15. double mainAxisSpacing = 8,
  16. double crossAxisSpacing = 8,
  17. double childAspectRatio = 1.0,
  18. double? mainAxisExtent,
  19. bool addAutomaticKeepAlives = true,
  20. bool addRepaintBoundaries = true,
  21. bool addSemanticIndexes = true,
  22. double? cacheExtent,
  23. ChildIndexGetter? findChildIndexCallback,
  24. int? semanticChildCount,
  25. DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  26. ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
  27. String? restorationId,
  28. Clip clipBehavior = Clip.hardEdge,
})

Implementation

GridView EnGridView<T>({
  required List<T> items,
  required Widget Function(ContextIndexItem<T>) itemView,
  Key? key,
  Axis scrollDirection = Axis.vertical,
  bool reverse = false,
  ScrollController? controller,
  bool? primary,
  ScrollPhysics? physics,
  required bool shrinkWrap,
  EdgeInsetsGeometry? padding = const EdgeInsets.symmetric(horizontal: 8, vertical: 8),
  int? columnCount,
  int? crossAxisCount,
  double crossAxisExtent = 80,
  double flexPercent = 0.2,
  double mainAxisSpacing = 8,
  double crossAxisSpacing = 8,
  double childAspectRatio = 1.0,
  double? mainAxisExtent,
  bool addAutomaticKeepAlives = true,
  bool addRepaintBoundaries = true,
  bool addSemanticIndexes = true,
  double? cacheExtent,
  ChildIndexGetter? findChildIndexCallback,
  int? semanticChildCount,
  DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
  String? restorationId,
  Clip clipBehavior = Clip.hardEdge,
}) {
  GridDelegateX gridDelegate = GridDelegateX(
    columnCount: crossAxisCount ?? columnCount ?? 0,
    crossAxisExtent: crossAxisExtent,
    mainAxisSpacing: mainAxisSpacing,
    crossAxisSpacing: crossAxisSpacing,
    childAspectRatio: childAspectRatio,
    mainAxisExtent: mainAxisExtent,
    flexPercent: flexPercent,
  );
  SliverChildDelegate childrenDelegate = SliverChildBuilderDelegate(
    (c, i) => i >= items.length ? null : itemView(ContextIndexItem(c, i, items[i])).container(key: ObjectKey(items[i])),
    findChildIndexCallback: findChildIndexCallback,
    childCount: items.length,
    addAutomaticKeepAlives: addAutomaticKeepAlives,
    addRepaintBoundaries: addRepaintBoundaries,
    addSemanticIndexes: addSemanticIndexes,
  );

  return GridView.custom(
    gridDelegate: gridDelegate,
    childrenDelegate: childrenDelegate,
    key: key,
    scrollDirection: scrollDirection,
    reverse: reverse,
    controller: controller,
    primary: primary,
    physics: physics,
    shrinkWrap: shrinkWrap,
    padding: padding,
    cacheExtent: cacheExtent,
    semanticChildCount: semanticChildCount,
    dragStartBehavior: dragStartBehavior,
    keyboardDismissBehavior: keyboardDismissBehavior,
    restorationId: restorationId,
    clipBehavior: clipBehavior,
  );
}