toPaginatedGridView method
Widget
toPaginatedGridView({
- required Widget itemBuilder(
- BuildContext context,
- T item,
- int index
- required VoidCallback onLoadMore,
- required bool isLoading,
- Widget? emptyStateWidget,
- String defaultEmptyMessage = "There is no data to show",
- Widget? loadingIndicator,
- int crossAxisCount = 2,
- double crossAxisSpacing = 8.0,
- double mainAxisSpacing = 8.0,
- Axis scrollDirection = Axis.vertical,
- bool shrinkWrap = false,
- bool primary = false,
- ScrollPhysics? physics,
Builds a paginated GridView with an optional empty state
Implementation
Widget toPaginatedGridView({
required Widget Function(BuildContext context, T item, int index) itemBuilder,
required VoidCallback onLoadMore,
required bool isLoading,
Widget? emptyStateWidget,
String defaultEmptyMessage = "There is no data to show",
Widget? loadingIndicator,
int crossAxisCount = 2,
double crossAxisSpacing = 8.0,
double mainAxisSpacing = 8.0,
Axis scrollDirection = Axis.vertical,
bool shrinkWrap = false,
bool primary = false,
ScrollPhysics? physics,
}) {
if ((this == null || this!.isEmpty) && !isLoading) {
return emptyStateWidget ??
Center(
child: Text(
defaultEmptyMessage,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 16, color: Colors.grey),
),
);
}
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: crossAxisCount,
crossAxisSpacing: crossAxisSpacing,
mainAxisSpacing: mainAxisSpacing,
),
itemCount: (this?.length ?? 0) + (isLoading ? 1 : 0),
scrollDirection: scrollDirection,
shrinkWrap: shrinkWrap,
primary: primary,
physics: physics,
itemBuilder: (context, index) {
if (index == (this?.length ?? 0)) {
onLoadMore();
return loadingIndicator ?? Center(child: CircularProgressIndicator());
}
return itemBuilder(context, this![index], index);
},
);
}