Guest User

Untitled

a guest
Oct 18th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. @immutable
  2. class StreamWidget<T> extends StatelessWidget {
  3. final Stream<T> stream;
  4. final DataBuilder<T> builder;
  5. final LoadingBuilder loadingBuilder;
  6. final ErrorBuilder errorBuilder;
  7.  
  8. StreamWidget(
  9. {@required this.stream,
  10. @required this.builder,
  11. this.loadingBuilder,
  12. this.errorBuilder});
  13.  
  14. @override
  15. Widget build(BuildContext context) =>
  16. StreamBuilder<T>(builder: (context, snapshot) {
  17. if (snapshot.hasError) {
  18. return errorBuilder != null
  19. ? errorBuilder(context, snapshot.error)
  20. : Container();
  21. }
  22.  
  23. if (!snapshot.hasData) {
  24. return loadingBuilder != null ? loadingBuilder(context) : Container();
  25. }
  26.  
  27. builder(context, snapshot.data);
  28. });
  29. }
  30.  
  31. class MyFancyWidget extends StatefulWidget {
  32. @override
  33. _MyFancyWidgetState createState() => _MyFancyWidgetState();
  34. }
  35.  
  36. class _MyFancyWidgetState extends State<MyFancyWidget> {
  37. @override
  38. Widget build(BuildContext context) {
  39. return StreamWidget<String>(
  40. stream: Observable.just("Hello!").delay(Duration(seconds: 2)),
  41. loadingBuilder: (context) => CircularProgressIndicator(),
  42. builder: (context, message) => Text(message));
  43. }
  44. }
Add Comment
Please, Sign In to add comment