when<T> static method
Widget
when<T>({
- required AsyncValue<
List< value,T> > - required Widget buildItem(
- T item
- Color? backgroundColor,
- EdgeInsetsGeometry? contentPadding,
- bool shrinkWrap = true,
- Widget separatorBuilder()?,
- ScrollPhysics? physics,
- EdgeInsetsGeometry? itemPadding,
- BoxDecoration? itemDecoration,
- bool removeTopPadding = false,
- Widget? emptyWidget,
- bool isLoading = false,
- int skeletonCount = 3,
- Widget skeletonBuilder()?,
- Widget buildEmptyItem(
- BuildContext,
- List<
T>
Creates an InfoList that handles AsyncValue data. This constructor automatically handles loading and error states.
Example:
InfoList.when(
value: patientData,
buildItem: (patient) => _PatientInfoItem(patient: patient),
shrinkWrap: false,
physics: const BouncingScrollPhysics(),
backgroundColor: AppColors.white,
contentPadding: EdgeInsets.zero,
itemDecoration: const BoxDecoration(
border: Border(
bottom: BorderSide(
color: AppColors.gray100,
),
),
),
)
Implementation
static Widget when<T>({
required AsyncValue<List<T>> value,
required Widget Function(T item) buildItem,
Color? backgroundColor,
EdgeInsetsGeometry? contentPadding,
bool shrinkWrap = true,
Widget Function(BuildContext, int)? separatorBuilder,
ScrollPhysics? physics,
EdgeInsetsGeometry? itemPadding,
BoxDecoration? itemDecoration,
bool removeTopPadding = false,
Widget? emptyWidget,
bool isLoading = false,
int skeletonCount = 3,
Widget Function(BuildContext, int)? skeletonBuilder,
Widget Function(BuildContext, List<T>)? buildEmptyItem,
}) {
return value.when(
data: (items) => InfoList<T>(
items: items,
buildItem: buildItem,
backgroundColor: backgroundColor,
contentPadding: contentPadding,
shrinkWrap: shrinkWrap,
separatorBuilder: separatorBuilder,
physics: physics,
itemPadding: itemPadding,
itemDecoration: itemDecoration,
removeTopPadding: removeTopPadding,
emptyWidget: emptyWidget,
isLoading: isLoading,
skeletonCount: skeletonCount,
skeletonBuilder: skeletonBuilder,
buildEmptyItem: buildEmptyItem,
),
loading: () => InfoList<T>(
items: const [],
buildItem: (item) => const SizedBox(),
isLoading: true,
skeletonCount: skeletonCount,
skeletonBuilder: skeletonBuilder,
backgroundColor: backgroundColor,
contentPadding: contentPadding,
shrinkWrap: shrinkWrap,
separatorBuilder: separatorBuilder,
physics: physics,
itemPadding: itemPadding,
itemDecoration: itemDecoration,
removeTopPadding: removeTopPadding,
),
error: (error, stack) => Center(
child: SelectableText.rich(
TextSpan(
text: 'Error: ',
style: const TextStyle(color: Colors.red),
children: [
TextSpan(text: error.toString()),
],
),
),
),
);
}