AsyncBuilder<T> function

Widget AsyncBuilder<T>({
  1. required Future<T> future,
  2. required Widget builder(
    1. BuildContext,
    2. T
    ),
  3. Widget waiting(
    1. BuildContext
    )?,
  4. Widget failed(
    1. BuildContext
    )?,
  5. T? initValue,
})

Implementation

Widget AsyncBuilder<T>({
  required Future<T> future,
  required Widget Function(BuildContext, T) builder,
  Widget Function(BuildContext)? waiting,
  Widget Function(BuildContext)? failed,
  T? initValue,
}) {
  return FutureBuilder<T>(
    future: future,
    initialData: initValue,
    builder: (BuildContext context, AsyncSnapshot<T> snapshot) {
      switch (snapshot.connectionState) {
        case ConnectionState.waiting || ConnectionState.none || ConnectionState.active:
          return waiting?.call(context) ?? CircularProgressIndicator().centered();
        case ConnectionState.done:
          if (snapshot.hasData) {
            return builder(context, snapshot.requireData);
          } else {
            return failed?.call(context) ?? Icons.error_outline.icon(color: Colors.orangeAccent).centered();
          }
      }
    },
  );
}