grid<T, TResponse> static method

Widget grid<T, TResponse>({
  1. required Future<TResponse> fetchPage(
    1. dynamic pageKey
    ),
  2. required PageInfo<T> parseResponse(
    1. TResponse response,
    2. dynamic currentPageKey
    ),
  3. required Widget itemBuilder(
    1. T item,
    2. int index
    ),
  4. required int crossAxisCount,
  5. dynamic firstPageKey = 0,
  6. bool enablePullToRefresh = true,
  7. Object? provider,
  8. double crossAxisSpacing = 8.0,
  9. double mainAxisSpacing = 8.0,
  10. double childAspectRatio = 1.0,
  11. Widget refreshIndicatorBuilder(
    1. BuildContext context,
    2. IndicatorController controller
    )?,
  12. Color? refreshIndicatorColor,
  13. Color? refreshIndicatorBackgroundColor,
  14. double? refreshIndicatorStrokeWidth,
  15. double? refreshIndicatorDisplacement,
  16. Widget? loadingIndicator,
  17. Widget errorIndicator(
    1. Object error,
    2. WidgetRef ref
    )?,
  18. Widget fetchMoreErrorIndicator(
    1. Object error,
    2. WidgetRef ref
    )?,
  19. Widget? noItemsIndicator,
  20. Widget? noMoreItemsIndicator,
  21. EdgeInsets? padding,
  22. bool shrinkWrap = false,
  23. ScrollPhysics? physics,
  24. VoidCallback? onRetry,
  25. VoidCallback? onRefresh,
  26. VoidCallback? onNoItemsActionTap,
  27. String? noItemsTitle,
  28. String? noItemsMessage,
  29. String? noItemsActionTitle,
  30. String? noMoreItemsTitle,
  31. String? noMoreItemsMessage,
  32. String? noMoreItemsActionTitle,
  33. int itemsThresholdToTriggerLoad = 3,
})

Creates an infinite scroll grid that works with any API format

Similar to list but renders items in a grid layout. Note: Due to grid constraints, loading and error indicators are sized as grid items. For full-width indicators, consider using list with custom itemBuilder for grid-like layouts.

Implementation

static Widget grid<T, TResponse>({
  required Future<TResponse> Function(dynamic pageKey) fetchPage,
  required PageInfo<T> Function(TResponse response, dynamic currentPageKey)
  parseResponse,
  required Widget Function(T item, int index) itemBuilder,
  required int crossAxisCount,
  dynamic firstPageKey = 0,
  bool enablePullToRefresh = true,

  // Provider integration
  Object? provider,

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

  // Refresh indicator customization
  Widget Function(BuildContext context, IndicatorController controller)?
  refreshIndicatorBuilder,
  Color? refreshIndicatorColor,
  Color? refreshIndicatorBackgroundColor,
  double? refreshIndicatorStrokeWidth,
  double? refreshIndicatorDisplacement,

  // Customization
  Widget? loadingIndicator,
  Widget Function(Object error, WidgetRef ref)? errorIndicator,
  Widget Function(Object error, WidgetRef ref)? fetchMoreErrorIndicator,
  Widget? noItemsIndicator,
  Widget? noMoreItemsIndicator,

  // Grid options
  EdgeInsets? padding,
  bool shrinkWrap = false,
  ScrollPhysics? physics,

  // Callbacks
  VoidCallback? onRetry,
  VoidCallback? onRefresh,

  // No items
  VoidCallback? onNoItemsActionTap,
  String? noItemsTitle,
  String? noItemsMessage,
  String? noItemsActionTitle,

  // No more items
  String? noMoreItemsTitle,
  String? noMoreItemsMessage,
  String? noMoreItemsActionTitle,

  // Advanced options
  int itemsThresholdToTriggerLoad = 3,
}) {
  return _PaginationGridWidget<T, TResponse>(
    fetchPage: fetchPage,
    parseResponse: parseResponse,
    itemBuilder: itemBuilder,
    crossAxisCount: crossAxisCount,
    firstPageKey: firstPageKey,
    enablePullToRefresh: enablePullToRefresh,
    provider: provider,
    refreshIndicatorBuilder: refreshIndicatorBuilder,
    refreshIndicatorColor: refreshIndicatorColor,
    refreshIndicatorBackgroundColor: refreshIndicatorBackgroundColor,
    refreshIndicatorStrokeWidth: refreshIndicatorStrokeWidth,
    refreshIndicatorDisplacement: refreshIndicatorDisplacement,
    crossAxisSpacing: crossAxisSpacing,
    mainAxisSpacing: mainAxisSpacing,
    childAspectRatio: childAspectRatio,
    loadingIndicator: loadingIndicator,
    errorIndicator: errorIndicator,
    fetchMoreErrorIndicator: fetchMoreErrorIndicator,
    noItemsIndicator: noItemsIndicator,
    noMoreItemsIndicator: noMoreItemsIndicator,
    padding: padding,
    shrinkWrap: shrinkWrap,
    physics: physics,
    onRetry: onRetry,
    onRefresh: onRefresh,
    onNoItemsTap: onNoItemsActionTap,
    noItemsTitle: noItemsTitle,
    noItemsMessage: noItemsMessage,
    noItemsActionTitle: noItemsActionTitle,
    noMoreItemsTitle: noMoreItemsTitle,
    noMoreItemsMessage: noMoreItemsMessage,
    noMoreItemsActionTitle: noMoreItemsActionTitle,
    itemsThresholdToTriggerLoad: itemsThresholdToTriggerLoad,
  );
}