デフォルトサンプル


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),
      ), // この末尾のコンマにより、ビルド メソッドの自動書式設定がより適切になります。
    );
  }
}