when<T> static method

Widget when<T>({
  1. required AsyncValue<List<T>> value,
  2. required Widget buildItem(
    1. T item
    ),
  3. Color? backgroundColor,
  4. EdgeInsetsGeometry? contentPadding,
  5. bool shrinkWrap = true,
  6. Widget separatorBuilder(
    1. BuildContext,
    2. int
    )?,
  7. ScrollPhysics? physics,
  8. EdgeInsetsGeometry? itemPadding,
  9. BoxDecoration? itemDecoration,
  10. bool removeTopPadding = false,
  11. Widget? emptyWidget,
  12. bool isLoading = false,
  13. int skeletonCount = 3,
  14. Widget skeletonBuilder(
    1. BuildContext,
    2. int
    )?,
  15. Widget buildEmptyItem(
    1. BuildContext,
    2. 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,
      ),
    ),
  ),
)

InfoList Example

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()),
          ],
        ),
      ),
    ),
  );
}