list<T> static method
Widget
list<T>({
- required FutureProvider<
List< provider,T> > - required Widget itemBuilder(
- T item,
- int index
- required BuildContext context,
- Widget? loading,
- Widget errorBuilder(
- Object error,
- StackTrace? stackTrace
- Widget? noItemsBuilder,
- Future<
void> noItemsAction()?, - String? noItemsTitle,
- EdgeInsets? padding,
- bool shrinkWrap = false,
- ScrollPhysics? physics,
- Widget separatorBuilder()?,
- VoidCallback? onRetry,
- 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),
);
},
);
}