list<T> static method

Widget list<T>({
  1. required FutureProvider<List<T>> provider,
  2. required Widget itemBuilder(
    1. T item,
    2. int index
    ),
  3. required BuildContext context,
  4. Widget? loading,
  5. Widget errorBuilder(
    1. Object error,
    2. StackTrace? stackTrace
    )?,
  6. Widget? noItemsBuilder,
  7. Future<void> noItemsAction()?,
  8. String? noItemsTitle,
  9. EdgeInsets? padding,
  10. bool shrinkWrap = false,
  11. ScrollPhysics? physics,
  12. Widget separatorBuilder(
    1. BuildContext,
    2. int
    )?,
  13. VoidCallback? onRetry,
  14. Future<void> onRefresh()?,
})

Creates a refreshable list widget

Perfect for displaying lists of items with pull-to-refresh functionality. Works with any provider that returns List<T>.

Implementation

static Widget list<T>({
  required FutureProvider<List<T>> provider,
  required Widget Function(T item, int index) itemBuilder,
  required BuildContext context,

  // Customization
  Widget? loading,
  Widget Function(Object error, StackTrace? stackTrace)? errorBuilder,
  Widget? noItemsBuilder,
  Future<void> Function()? noItemsAction,
  String? noItemsTitle,
  EdgeInsets? padding,
  bool shrinkWrap = false,
  ScrollPhysics? physics,
  Widget Function(BuildContext, int)? separatorBuilder,

  // Callbacks
  VoidCallback? onRetry,
  Future<void> Function()? onRefresh,
}) {
  return _StateWidget<List<T>>(
    provider: provider,
    onRefresh: onRefresh,
    onRetry: onRetry,
    loading: loading,
    error: errorBuilder,
    builder: (items, ref) {
      if (items.isEmpty) {
        return noItemsBuilder ??
            JetEmptyWidget(
              title: context.jetI10n.noItemsFound,
              message: context.jetI10n.noItemsFoundMessage,
              onTap:
                  noItemsAction ??
                  onRetry ??
                  () => ref.refresh(provider.future),
              showAction: true,
              actionText: noItemsTitle,
            );
      }
      if (separatorBuilder != null) {
        return ListView.separated(
          padding: padding,
          shrinkWrap: shrinkWrap,
          physics: physics,
          itemCount: items.length,
          itemBuilder: (context, index) => itemBuilder(items[index], index),
          separatorBuilder: separatorBuilder,
        );
      }
      return ListView.builder(
        padding: padding,
        shrinkWrap: shrinkWrap,
        physics: physics,
        itemCount: items.length,
        itemBuilder: (context, index) => itemBuilder(items[index], index),
      );
    },
  );
}