Skip to content

Instantly share code, notes, and snippets.

@JulianBissekkou
Created October 18, 2018 08:43
Show Gist options
  • Save JulianBissekkou/6827fa4845b048938a2be76be0091798 to your computer and use it in GitHub Desktop.
Save JulianBissekkou/6827fa4845b048938a2be76be0091798 to your computer and use it in GitHub Desktop.
@immutable
class StreamWidget<T> extends StatelessWidget {
final Stream<T> stream;
final DataBuilder<T> builder;
final LoadingBuilder loadingBuilder;
final ErrorBuilder errorBuilder;
StreamWidget(
{@required this.stream,
@required this.builder,
this.loadingBuilder,
this.errorBuilder});
@override
Widget build(BuildContext context) =>
StreamBuilder<T>(builder: (context, snapshot) {
if (snapshot.hasError) {
return errorBuilder != null
? errorBuilder(context, snapshot.error)
: Container();
}
if (!snapshot.hasData) {
return loadingBuilder != null ? loadingBuilder(context) : Container();
}
builder(context, snapshot.data);
});
}
class MyFancyWidget extends StatefulWidget {
@override
_MyFancyWidgetState createState() => _MyFancyWidgetState();
}
class _MyFancyWidgetState extends State<MyFancyWidget> {
@override
Widget build(BuildContext context) {
return StreamWidget<String>(
stream: Observable.just("Hello!").delay(Duration(seconds: 2)),
loadingBuilder: (context) => CircularProgressIndicator(),
builder: (context, message) => Text(message));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment