when method

Widget when({
  1. required Widget idle(),
  2. Widget loading()?,
  3. Widget success(
    1. TData data
    )?,
  4. Widget error(
    1. Object error
    )?,
})

Builds UI based on the current mutation state.

  • idle: shown before the mutation is triggered (required)
  • loading: shown while the mutation is running (defaults to idle)
  • success: shown after a successful mutation (defaults to idle)
  • error: shown after a failed mutation (defaults to idle)

Implementation

Widget when({
  required Widget Function() idle,
  Widget Function()? loading,
  Widget Function(TData data)? success,
  Widget Function(Object error)? error,
}) {
  return AnimatedBuilder(
    animation: Listenable.merge([status, data, this.error]),
    builder: (context, _) {
      switch (status.value) {
        case ZenMutationStatus.loading:
          return loading?.call() ?? idle();
        case ZenMutationStatus.success:
          final result = data.value;
          return result != null ? (success?.call(result) ?? idle()) : idle();
        case ZenMutationStatus.error:
          final err = this.error.value;
          return err != null ? (error?.call(err) ?? idle()) : idle();
        case ZenMutationStatus.idle:
          return idle();
      }
    },
  );
}