grid<T> static method

Widget grid<T>({
  1. required FutureProvider<List<T>> provider,
  2. required Widget itemBuilder(
    1. T item,
    2. int index
    ),
  3. required int crossAxisCount,
  4. double crossAxisSpacing = 8.0,
  5. double mainAxisSpacing = 8.0,
  6. double childAspectRatio = 1.0,
  7. Widget? loading,
  8. Widget error(
    1. Object error,
    2. StackTrace? stackTrace
    )?,
  9. EdgeInsets? padding,
  10. bool shrinkWrap = false,
  11. ScrollPhysics? physics,
  12. VoidCallback? onRetry,
  13. Future<void> onRefresh()?,
})

Creates a refreshable grid widget

Perfect for displaying items in a grid layout with pull-to-refresh.

Implementation

static Widget grid<T>({
  required FutureProvider<List<T>> provider,
  required Widget Function(T item, int index) itemBuilder,
  required int crossAxisCount,

  // Grid customization
  double crossAxisSpacing = 8.0,
  double mainAxisSpacing = 8.0,
  double childAspectRatio = 1.0,

  // General customization
  Widget? loading,
  Widget Function(Object error, StackTrace? stackTrace)? error,
  EdgeInsets? padding,
  bool shrinkWrap = false,
  ScrollPhysics? physics,

  // Callbacks
  VoidCallback? onRetry,
  Future<void> Function()? onRefresh,
}) {
  return _StateWidget<List<T>>(
    provider: provider,
    onRefresh: onRefresh,
    onRetry: onRetry,
    loading: loading,
    error: error,
    builder: (items, ref) {
      return GridView.builder(
        padding: padding,
        shrinkWrap: shrinkWrap,
        physics: physics,
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: crossAxisCount,
          crossAxisSpacing: crossAxisSpacing,
          mainAxisSpacing: mainAxisSpacing,
          childAspectRatio: childAspectRatio,
        ),
        itemCount: items.length,
        itemBuilder: (context, index) => itemBuilder(items[index], index),
      );
    },
  );
}