grid<T, TResponse> static method
Widget
grid<T, TResponse>({
- required Future<
TResponse> fetchPage(- dynamic pageKey
- required PageInfo<
T> parseResponse(- TResponse response,
- dynamic currentPageKey
- required Widget itemBuilder(
- T item,
- int index
- required int crossAxisCount,
- dynamic firstPageKey = 0,
- bool enablePullToRefresh = true,
- Object? provider,
- double crossAxisSpacing = 8.0,
- double mainAxisSpacing = 8.0,
- double childAspectRatio = 1.0,
- Widget refreshIndicatorBuilder(
- BuildContext context,
- IndicatorController controller
- Color? refreshIndicatorColor,
- Color? refreshIndicatorBackgroundColor,
- double? refreshIndicatorStrokeWidth,
- double? refreshIndicatorDisplacement,
- Widget? loadingIndicator,
- Widget errorIndicator()?,
- Widget fetchMoreErrorIndicator()?,
- Widget? noItemsIndicator,
- Widget? noMoreItemsIndicator,
- EdgeInsets? padding,
- bool shrinkWrap = false,
- ScrollPhysics? physics,
- VoidCallback? onRetry,
- VoidCallback? onRefresh,
- VoidCallback? onNoItemsActionTap,
- String? noItemsTitle,
- String? noItemsMessage,
- String? noItemsActionTitle,
- String? noMoreItemsTitle,
- String? noMoreItemsMessage,
- String? noMoreItemsActionTitle,
- 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,
);
}