import 'dart:async'; import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Flutter Demo', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => new _MyHomePageState(); } class _MyHomePageState extends State { @override Widget build(BuildContext context) { var futureBuilder = new FutureBuilder( future: _getData(), builder: (BuildContext context, AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: case ConnectionState.waiting: return new Text('loading...'); default: if (snapshot.hasError) return new Text('Error: ${snapshot.error}'); else return createListView(context, snapshot); } }, ); return new Scaffold( appBar: new AppBar( title: new Text("Home Page"), ), body: futureBuilder, ); } Future> _getData() async { var values = new List(); values.add("Horses"); values.add("Goats"); values.add("Chickens"); //throw new Exception("Danger Will Robinson!!!"); await new Future.delayed(new Duration(seconds: 5)); return values; } Widget createListView(BuildContext context, AsyncSnapshot snapshot) { List values = snapshot.data; return new ListView.builder( itemCount: values.length, itemBuilder: (BuildContext context, int index) { return new Column( children: [ new ListTile( title: new Text(values[index]), ), new Divider(height: 2.0,), ], ); }, ); } }