toPaginatedListView method

Widget toPaginatedListView({
  1. required Widget itemBuilder(
    1. BuildContext context,
    2. T item,
    3. int index
    ),
  2. required VoidCallback onLoadMore,
  3. required bool isLoading,
  4. Widget? emptyStateWidget,
  5. String defaultEmptyMessage = "There is no data to show",
  6. Widget? loadingIndicator,
  7. Axis scrollDirection = Axis.vertical,
  8. bool shrinkWrap = false,
  9. bool primary = false,
  10. ScrollPhysics? physics,
})

Builds a paginated ListView with an optional empty state

Implementation

Widget toPaginatedListView({
  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,
  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 ListView.builder(
    itemCount: (this?.length ?? 0) + (isLoading ? 1 : 0),
    scrollDirection: scrollDirection,
    shrinkWrap: shrinkWrap,
    primary: primary,
    physics: physics,
    itemBuilder: (context, index) {
      if (index == this?.length) {
        onLoadMore();
        return loadingIndicator ?? Center(child: CircularProgressIndicator());
      }
      return itemBuilder(context, this![index], index);
    },
  );
}