familyGrid<T, Param> static method

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

Creates a refreshable grid widget with family support

Implementation

static Widget familyGrid<T, Param>({
  required FutureProvider<List<T>> Function(Param) provider,
  required Param param,
  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 _StateFamilyWidget<List<T>, Param>(
    provider: provider,
    param: param,
    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),
      );
    },
  );
}