]> git.cworth.org Git - lmno.games/commitdiff
Add initState to start the async call to fetch player
authorKevin Worth <kworth082@gmail.com>
Mon, 4 May 2020 00:21:31 +0000 (20:21 -0400)
committerCarl Worth <cworth@cworth.org>
Sat, 23 May 2020 13:49:00 +0000 (06:49 -0700)
initState is a good place to do asynchronous calls that we just
need to happen one time at the beginning.

So, in initStart we fetch the player and put it in a Future, and then
when (each and every time) build gets called, it uses what has
been fetched or shows the spinner if the fetch hasn't completed
successfully yet.

flutterempires/lib/main.dart

index 7bb1c7deb4d75311e97d82f1a959cde946f122f2..816b13eab8ad4082d493bcb9b901e84bdc946c53 100644 (file)
@@ -53,6 +53,14 @@ class MyHomePage extends StatefulWidget {
 class _MyHomePageState extends State<MyHomePage> {
   int _counter = 0;
 
+  Future<Player> futurePlayer;
+
+  @override
+  void initState() {
+    super.initState();
+    futurePlayer = Player.fetchPlayer();
+  }
+
   void _incrementCounter() {
     setState(() {
       // This call to setState tells the Flutter framework that something has
@@ -107,7 +115,13 @@ class _MyHomePageState extends State<MyHomePage> {
               ),
               Spacer(flex: 1),
               FutureBuilder<Player>(
+                future: futurePlayer,
                 builder: (context, snapshot) {
+                  if (snapshot.hasData) {
+                    return Text(snapshot.data.name);
+                  } else if (snapshot.hasError) {
+                    return Text("${snapshot.error}");
+                  }
                   // By default, show a loading spinner.
                   return CircularProgressIndicator();
                 },