future<V> function
Widget
future<V>(
- BuildContext context, {
- FutureOr<
V?> waitFor, - String? observerName,
- bool sliver = false,
- bool allowNull = false,
- V? initialData,
- Duration? timeout,
- String? key,
- required Widget builder(
- BuildContext context,
- V? resolved
- Widget errorBuilder(
- BuildContext context,
- dynamic error
- Widget spinner(
- BuildContext context
Shorthand for FutureBuilder - combines an Observer
Implementation
Widget future<V>(BuildContext context,
{FutureOr<V?> waitFor,
String? observerName,
bool sliver = false,
bool allowNull = false,
V? initialData,
Duration? timeout,
String? key,
required Widget builder(BuildContext context, V? resolved),
Widget errorBuilder(BuildContext context, error)?,
Widget spinner(BuildContext context)?}) {
timeout ??= 20.seconds;
errorBuilder ??= ((context, err) =>
sliverBox(ErrorText(err?.toString() ?? "Error"), sliver));
spinner ??= (context) =>
sliverBox(Center(child: PlatformCircularProgressIndicator()), sliver);
initialData ??= (waitFor is V) ? waitFor : null;
var future = Future.value(waitFor);
if (initialData == null) future = future.timeout(timeout);
WidgetBuilder built = (_) => FutureBuilder<V?>(
key: key == null ? null : Key("$key-future"),
future: future,
initialData: initialData,
builder: (context, snapshot) {
if (snapshot.hasData || allowNull == true) {
return builder(context, snapshot.data);
} else if (snapshot.hasError) {
_log.severe("Error in future widget: $key: ${snapshot.error}",
snapshot.error);
return errorBuilder!(context, snapshot.error);
} else {
return spinner!(context);
}
});
return observerName != null
? observe(context, observerName, built)
: built(context);
}