X-Git-Url: https://git.cworth.org/git?p=lmno.games;a=blobdiff_plain;f=flempires%2Flib%2Fmain.dart;fp=flempires%2Flib%2Fmain.dart;h=fb0f4914aed9daa75e2c3d7ba1c38045972459a1;hp=0000000000000000000000000000000000000000;hb=5a60d2577ec9346fcaacd04260fc4a4c27696e92;hpb=b9c184f2a7fd491e736c32b02baa38b18f906eb9 diff --git a/flempires/lib/main.dart b/flempires/lib/main.dart new file mode 100644 index 0000000..fb0f491 --- /dev/null +++ b/flempires/lib/main.dart @@ -0,0 +1,147 @@ +import 'package:flutter/material.dart'; +import 'package:flempires/player.dart'; + +void main() { + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Empires', + theme: ThemeData( + // This is the theme of your application. + // + // Try running your application with "flutter run". You'll see the + // application has a blue toolbar. Then, without quitting the app, try + // changing the primarySwatch below to Colors.green and then invoke + // "hot reload" (press "r" in the console where you ran "flutter run", + // or simply save your changes to "hot reload" in a Flutter IDE). + // Notice that the counter didn't reset back to zero; the application + // is not restarted. + primarySwatch: Colors.blue, + // This makes the visual density adapt to the platform that you run + // the app on. For desktop platforms, the controls will be smaller and + // closer together (more dense) than on mobile platforms. + visualDensity: VisualDensity.adaptivePlatformDensity, + ), + home: MyHomePage(title: 'Empires'), + ); + } +} + +class MyHomePage extends StatefulWidget { + MyHomePage({Key key, this.title}) : super(key: key); + + // This widget is the home page of your application. It is stateful, meaning + // that it has a State object (defined below) that contains fields that affect + // how it looks. + + // This class is the configuration for the state. It holds the values (in this + // case the title) provided by the parent (in this case the App widget) and + // used by the build method of the State. Fields in a Widget subclass are + // always marked "final". + + final String title; + + @override + _MyHomePageState createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + Future futurePlayer; + Future> allPlayers; + + @override + void initState() { + super.initState(); + futurePlayer = Player.fetchFirstPlayer(); + allPlayers = Player.fetchAllPlayers(); + } + + void onPressPlusButton() { + setState(() { + // Probably use this to POST player name and character + allPlayers = Player.fetchAllPlayers(); + }); + } + + @override + Widget build(BuildContext context) { + // This method is rerun every time setState is called, for instance as done + // by the _incrementCounter method above. + // + // The Flutter framework has been optimized to make rerunning build methods + // fast, so that you can just rebuild anything that needs updating rather + // than having to individually change instances of widgets. + return Scaffold( + appBar: AppBar( + // Here we take the value from the MyHomePage object that was created by + // the App.build method, and use it to set our appbar title. + title: Text(widget.title), + ), + body: new Container( + margin: const EdgeInsets.only(left: 20.0, right: 20.0), + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Spacer(flex: 1), + Text( + 'Name:', + style: Theme.of(context).textTheme.headline4, + ), + TextField( + decoration: InputDecoration( + hintText: 'Enter your (real) name', + ), + ), + Spacer(flex: 1), + Text( + 'Character:', + style: Theme.of(context).textTheme.headline4, + ), + TextField( + decoration: InputDecoration( + hintText: 'Enter your empire character name', + ), + ), + Spacer(flex: 1), + Expanded( + flex: 20, + child: FutureBuilder>( + future: allPlayers, + builder: (context, snapshot) { + if (snapshot.hasData) { + if (snapshot.data.length == 0) { + return Text('No players yet'); + } else { + return ListView.builder( + itemCount: snapshot.data.length, + itemBuilder: (context, index) { + return ListTile( + title: Text( + snapshot.data[index].name.toString())); + }); + } + } else if (snapshot.hasError) { + return Text("${snapshot.error}"); + } + return CircularProgressIndicator(); + }), + ) + ], + ), + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: onPressPlusButton, + tooltip: 'Increment', + child: Icon(Icons.add), + ), // This trailing comma makes auto-formatting nicer for build methods. + ); + } +}