buildGridView function
Widget
buildGridView({
- required List data,
- required Widget renderItem(
- dynamic itemData
- required bool horizontal,
- required int itemsPerRow,
- required double horizontalSpacing,
- required double verticalSpacing,
- required double minItemDimension,
- ScrollPhysics? physics,
- ScrollController? controller,
- required double itemSize,
- bool invertItems = false,
- void onTapFlat(
- int itemIndex
- void onTapSection()?,
- BoxDecoration? itemDecoration,
- EdgeInsets? padding,
- int? sectionIndex,
Implementation
Widget buildGridView({
required List data,
required Widget Function(dynamic itemData) renderItem,
required bool horizontal,
required int itemsPerRow,
required double horizontalSpacing,
required double verticalSpacing,
required double minItemDimension,
ScrollPhysics? physics,
ScrollController? controller,
required double itemSize,
bool invertItems = false,
void Function(int itemIndex)? onTapFlat,
void Function(int sectionIndex, int itemIndex)? onTapSection,
BoxDecoration? itemDecoration,
EdgeInsets? padding,
int? sectionIndex,
}) {
final effectiveData = invertItems ? data.reversed.toList() : data;
return GridView.builder(
physics: physics,
controller: controller,
scrollDirection: horizontal ? Axis.horizontal : Axis.vertical,
padding: padding ?? const EdgeInsets.all(8.0),
shrinkWrap: true,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: itemsPerRow,
mainAxisExtent: minItemDimension > itemSize ? minItemDimension : itemSize,
crossAxisSpacing: horizontalSpacing,
mainAxisSpacing: verticalSpacing,
),
itemCount: effectiveData.length,
itemBuilder: (context, index) {
final itemData = effectiveData[index];
return onTapFlat != null
? InkWell(
onTap: () => onTapFlat(data.indexOf(itemData)),
child: buildGridItem(itemData, itemDecoration, renderItem, index),
)
: onTapSection != null
? InkWell(
onTap: () =>
onTapSection(sectionIndex!, data.indexOf(itemData)),
child: buildGridItem(
itemData, itemDecoration, renderItem, index),
)
: buildGridItem(itemData, itemDecoration, renderItem, index);
},
);
}