Guest User

Untitled

a guest
Apr 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'dart:async';
  3. import 'dart:convert';
  4.  
  5. void main() {
  6. runApp(new MyApp());
  7. }
  8.  
  9. class MyApp extends StatelessWidget {
  10. // This widget is the root of your application.
  11. @override
  12. Widget build(BuildContext context) {
  13. return new MaterialApp(
  14. title: 'Flutter demo',
  15. theme: new ThemeData(
  16. primarySwatch: Colors.blue,
  17. ),
  18. home: new MyHomePage(title: 'async demo'),
  19. );
  20. }
  21. }
  22.  
  23. class MyHomePage extends StatefulWidget {
  24. MyHomePage({Key key, this.title}) : super(key: key);
  25.  
  26. final String title;
  27.  
  28. @override
  29. _MyHomePageState createState() => new _MyHomePageState();
  30. }
  31.  
  32. class _MyHomePageState extends State<MyHomePage> {
  33.  
  34. var asyncWidget;
  35.  
  36. @override
  37. initState() {
  38. super.initState();
  39.  
  40. loadData().then((result) {
  41. print(result);
  42. setState(() {
  43. asyncWidget = result;
  44. });
  45. });
  46. }
  47.  
  48. loadData() async {
  49. var widget = new AsyncWidget();
  50. return widget.build();
  51. }
  52.  
  53. @override
  54. Widget build(BuildContext context) {
  55.  
  56. if(asyncWidget == null) {
  57. return new Scaffold(
  58. appBar: new AppBar(
  59. title: new Text("Loading..."),
  60. ),
  61. );
  62. } else {
  63. return new Scaffold(
  64. appBar: new AppBar(
  65. title: new Text(widget.title),
  66. ),
  67. body: new Center(
  68. child: this.asyncWidget,
  69. ),
  70. );
  71. }
  72. }
  73. }
  74.  
  75. class MyRenderer {
  76.  
  77. MyRenderer();
  78.  
  79. Widget render (List data) {
  80.  
  81. List<Widget> renderedWidgets = new List<Widget>();
  82.  
  83. data.forEach((element) {
  84. renderedWidgets.add(new ListTile(
  85. title: new Text("one element"),
  86. subtitle: new Text(element.toString()),
  87. ));
  88. });
  89. var lv = new ListView(
  90. children: renderedWidgets,
  91. );
  92. return lv;
  93. }
  94. }
  95.  
  96. class MyCollector {
  97.  
  98. Future gather() async {
  99.  
  100. var response = await // do the http request here;
  101.  
  102. return response.body;
  103. }
  104. }
  105.  
  106. class AsyncWidget {
  107.  
  108. MyCollector collector;
  109. MyRenderer renderer;
  110.  
  111. AsyncWidget() {
  112. this.collector = new MyCollector();
  113. this.renderer = new MyRenderer();
  114. }
  115.  
  116. Widget build() {
  117.  
  118. var data = this.collector.gather();
  119. data.then((response) {
  120. var responseObject = JSON.decode(response);
  121. print(response);
  122. return this.renderer.render(responseObject);
  123. });
  124. data.catchError((error) {
  125. return new Text("Oups");
  126. });
  127. }
  128. }
Add Comment
Please, Sign In to add comment