import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // このウィジェットは、アプリケーションのルートです。 @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( // これがアプリケーションのテーマです。 // // 「flutter run」でアプリケーションを実行してみてください。 // アプリケーションに青いツールバーがあることがわかります。次に、アプリを // 終了せずに、下の primarySwatch を Colors.green に変更してから、 // 「ホット リロード」を呼び出します(「flutter run」を実行したコンソールで // 「r」を押すか、単に変更を保存します)。 // カウンターがゼロにリセットされていないことに注意してください。 // アプリケーションは再起動されません。 primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({Key? key, required this.title}) : super(key: key); // このウィジェットは、アプリケーションのホームページです。 // これはステートフルです。つまり、外観に影響を与えるフィールドを含む State オブジェクト // (以下で定義)を持っていることを意味します。 // このクラスは、状態の構成です。 // 親(この場合はアプリ ウィジェット)によって提供され、 // State のビルド メソッドによって使用される値(この場合はタイトル)を保持します。 // Widget サブクラスのフィールドは常に「final」とマークされます。 final String title; @override State<MyHomePage> createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { // この setState の呼び出しは、Flutter フレームワークに、 // この State で何かが変更されたことを伝えます。 // これにより、以下のビルド メソッドが再実行され、更新された値が表示に反映されます。 // setState() を呼び出さずに _counter を変更した場合、 // build メソッドは再度呼び出されないため、何も起こらないように見えます。 _counter++; }); } @override Widget build(BuildContext context) { // このメソッドは、たとえば上記の _incrementCounter メソッドによって // 行われたように、setState が呼び出されるたびに再実行されます。 // // Flutter フレームワークは、ビルド メソッドの再実行を高速化するように // 最適化されているため、ウィジェットのインスタンスを個別に変更するのではなく、 // 更新が必要なものを再構築するだけで済みます。 return Scaffold( appBar: AppBar( // ここでは、App.build メソッドによって作成された MyHomePage オブジェクトから // 値を取得し、それを使用して appbar のタイトルを設定します。 title: Text(widget.title), ), body: Center( // Center はレイアウト ウィジェットです。 // 1つの子を取得し、親の中央に配置します。 child: Column( // 列もレイアウト ウィジェットです。 // 子のリストを取り、それらを垂直に配置します。デフォルトでは、 // 子を水平方向に合わせてサイズを変更し、親と同じ高さにしようとします。 // // 「デバッグ ペインティング」を呼び出します(コンソールで「p」を押し、 // Android Studio の Flutter Inspector から「Toggle Debug Paint」 // アクションを選択するか、Visual Studio Code で「Toggle Debug Paint」 // コマンドを選択します)、各ウィジェットのワイヤーフレームを表示します。 // // Column には、それ自体のサイズ変更方法と子の配置方法を制御するための // さまざまなプロパティがあります。 // ここでは mainAxisAlignment を使用して、子を垂直方向の中央に配置します。 // ここでの主軸は垂直軸です。 // これは、列が垂直であるためです(交差軸は水平になります)。 mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ const Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headline4, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: const Icon(Icons.add), ), // この末尾のコンマにより、ビルド メソッドの自動書式設定がより適切になります。 ); } }