asyncvalue_extensions.dart 800 B

123456789101112131415161718192021222324252627
  1. import 'package:flutter/material.dart';
  2. import 'package:hooks_riverpod/hooks_riverpod.dart';
  3. import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
  4. import 'package:immich_mobile/shared/ui/scaffold_error_body.dart';
  5. import 'package:logging/logging.dart';
  6. extension ScaffoldBody<T> on AsyncValue<T> {
  7. static final Logger _scaffoldBodyLog = Logger("ScaffoldBody");
  8. Widget scaffoldBodyWhen({
  9. required Widget Function(T data) onData,
  10. Widget? onError,
  11. }) {
  12. if (isLoading) {
  13. return const Center(
  14. child: ImmichLoadingIndicator(),
  15. );
  16. }
  17. if (hasError && !hasValue) {
  18. _scaffoldBodyLog.severe("Error occured in AsyncValue", error, stackTrace);
  19. return onError ?? const ScaffoldErrorBody();
  20. }
  21. return onData(requireValue);
  22. }
  23. }