|  | 
|  | 1 | +import 'package:flutter/material.dart'; | 
|  | 2 | + | 
|  | 3 | +void main() { | 
|  | 4 | + runApp(MyApp()); | 
|  | 5 | +} | 
|  | 6 | + | 
|  | 7 | +class MyApp extends StatelessWidget { | 
|  | 8 | + // This widget is the root of your application. | 
|  | 9 | + @override | 
|  | 10 | + Widget build(BuildContext context) { | 
|  | 11 | + return MaterialApp( | 
|  | 12 | + title: 'Flutter Demo', | 
|  | 13 | + theme: ThemeData( | 
|  | 14 | + // This is the theme of your application. | 
|  | 15 | + // | 
|  | 16 | + // Try running your application with "flutter run". You'll see the | 
|  | 17 | + // application has a blue toolbar. Then, without quitting the app, try | 
|  | 18 | + // changing the primarySwatch below to Colors.green and then invoke | 
|  | 19 | + // "hot reload" (press "r" in the console where you ran "flutter run", | 
|  | 20 | + // or simply save your changes to "hot reload" in a Flutter IDE). | 
|  | 21 | + // Notice that the counter didn't reset back to zero; the application | 
|  | 22 | + // is not restarted. | 
|  | 23 | + primarySwatch: Colors.blue, | 
|  | 24 | + ), | 
|  | 25 | + home: MyHomePage(title: 'Flutter Demo Home Page'), | 
|  | 26 | + ); | 
|  | 27 | + } | 
|  | 28 | +} | 
|  | 29 | + | 
|  | 30 | +class MyHomePage extends StatefulWidget { | 
|  | 31 | + MyHomePage({Key? key, required this.title}) : super(key: key); | 
|  | 32 | + | 
|  | 33 | + // This widget is the home page of your application. It is stateful, meaning | 
|  | 34 | + // that it has a State object (defined below) that contains fields that affect | 
|  | 35 | + // how it looks. | 
|  | 36 | + | 
|  | 37 | + // This class is the configuration for the state. It holds the values (in this | 
|  | 38 | + // case the title) provided by the parent (in this case the App widget) and | 
|  | 39 | + // used by the build method of the State. Fields in a Widget subclass are | 
|  | 40 | + // always marked "final". | 
|  | 41 | + | 
|  | 42 | + final String title; | 
|  | 43 | + | 
|  | 44 | + @override | 
|  | 45 | + _MyHomePageState createState() => _MyHomePageState(); | 
|  | 46 | +} | 
|  | 47 | + | 
|  | 48 | +class _MyHomePageState extends State<MyHomePage> { | 
|  | 49 | + int _counter = 0; | 
|  | 50 | + | 
|  | 51 | + void _incrementCounter() { | 
|  | 52 | + setState(() { | 
|  | 53 | + // This call to setState tells the Flutter framework that something has | 
|  | 54 | + // changed in this State, which causes it to rerun the build method below | 
|  | 55 | + // so that the display can reflect the updated values. If we changed | 
|  | 56 | + // _counter without calling setState(), then the build method would not be | 
|  | 57 | + // called again, and so nothing would appear to happen. | 
|  | 58 | + _counter++; | 
|  | 59 | + }); | 
|  | 60 | + } | 
|  | 61 | + | 
|  | 62 | + @override | 
|  | 63 | + Widget build(BuildContext context) { | 
|  | 64 | + // This method is rerun every time setState is called, for instance as done | 
|  | 65 | + // by the _incrementCounter method above. | 
|  | 66 | + // | 
|  | 67 | + // The Flutter framework has been optimized to make rerunning build methods | 
|  | 68 | + // fast, so that you can just rebuild anything that needs updating rather | 
|  | 69 | + // than having to individually change instances of widgets. | 
|  | 70 | + return Scaffold( | 
|  | 71 | + appBar: AppBar( | 
|  | 72 | + // Here we take the value from the MyHomePage object that was created by | 
|  | 73 | + // the App.build method, and use it to set our appbar title. | 
|  | 74 | + title: Text(widget.title), | 
|  | 75 | + ), | 
|  | 76 | + body: Center( | 
|  | 77 | + // Center is a layout widget. It takes a single child and positions it | 
|  | 78 | + // in the middle of the parent. | 
|  | 79 | + child: Column( | 
|  | 80 | + // Column is also a layout widget. It takes a list of children and | 
|  | 81 | + // arranges them vertically. By default, it sizes itself to fit its | 
|  | 82 | + // children horizontally, and tries to be as tall as its parent. | 
|  | 83 | + // | 
|  | 84 | + // Invoke "debug painting" (press "p" in the console, choose the | 
|  | 85 | + // "Toggle Debug Paint" action from the Flutter Inspector in Android | 
|  | 86 | + // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) | 
|  | 87 | + // to see the wireframe for each widget. | 
|  | 88 | + // | 
|  | 89 | + // Column has various properties to control how it sizes itself and | 
|  | 90 | + // how it positions its children. Here we use mainAxisAlignment to | 
|  | 91 | + // center the children vertically; the main axis here is the vertical | 
|  | 92 | + // axis because Columns are vertical (the cross axis would be | 
|  | 93 | + // horizontal). | 
|  | 94 | + mainAxisAlignment: MainAxisAlignment.center, | 
|  | 95 | + children: <Widget>[ | 
|  | 96 | + Text( | 
|  | 97 | + 'You have pushed the button this many times:', | 
|  | 98 | + ), | 
|  | 99 | + Text( | 
|  | 100 | + '$_counter', | 
|  | 101 | + style: Theme.of(context).textTheme.headline4, | 
|  | 102 | + ), | 
|  | 103 | + ], | 
|  | 104 | + ), | 
|  | 105 | + ), | 
|  | 106 | + floatingActionButton: FloatingActionButton( | 
|  | 107 | + onPressed: _incrementCounter, | 
|  | 108 | + tooltip: 'Increment', | 
|  | 109 | + child: Icon(Icons.add), | 
|  | 110 | + ), // This trailing comma makes auto-formatting nicer for build methods. | 
|  | 111 | + ); | 
|  | 112 | + } | 
|  | 113 | +} | 
0 commit comments