重要概念#2-1: Flutterの心臓部「ウィジェット(Widget)」とは何か?

Flutterの世界へようこそ!これからあなたがFlutterで何かを作る時、必ず「ウィジェット」という言葉を耳にします。テキスト、ボタン、画像、レイアウト、果てはアプリ全体まで... Flutterでは、目に見えるものも、見えないものも、すべてがウィジェットです。

このドキュメントでは、Flutterの心臓部であるウィジェットの正体を、レゴブロックや料理の材料に例えながら解き明かしていきます。

1. ウィジェットとは「部品」である

ウィジェットを最も簡単に理解する方法は、レゴブロックを想像することです。

Flutterのウィジェットも全く同じです。

小さなウィジェットを組み合わせて、より大きなウィジェットを作る」 これが、FlutterのUI構築における、たった一つの、しかし最も重要な原則です。

2. ウィジェットは「設定書」である

ここで少し技術的な話をします。ウィジェットは、画面に表示されるピクセルそのものではありません。

ウィジェットとは、「画面のこの部分に、こういう見た目で、こういう振る舞いをする要素を表示してください」とFlutterフレームワークに指示するための、不変の(変わらない)設定書なのです。

料理に例えるなら、ウィジェットは「レシピカード」です。 * レシピカード(ウィジェット)には、「タマネギをみじん切りにする」「塩を少々加える」といった指示が書かれています。 * 実際に調理を行うのは、シェフ(Flutterフレームワーク)です。 * シェフは、レシピカードの指示を読み取り、最終的な料理(画面のピクセル)を作り上げます。

この「ウィジェット=設定書」という考え方は、Flutterのパフォーマンスの秘密でもありますが、初めのうちは「ウィジェット=UIの部品」と理解しておけば十分です。

3. ウィジェットの主な種類

Flutterには何百ものウィジェットがありますが、大きく分けると以下のカテゴリに分類できます。

基本的なウィジェット(見える部品

レイアウトウィジェット(見えない枠組み

4. ウィジェットツリー:入れ子構造

Flutterのコードを見ると、ウィジェットが何重にも入れ子(ネスト)になっていることに気づくでしょう。

// 入れ子構造の例
Center( // 中央に配置するウィジェット
  child: Column( // 縦に並べるウィジェット
    children: <Widget>[
      Text('こんにちは'), // テキストウィジェット
      ElevatedButton( // ボタンウィジェット
        onPressed: () {},
        child: Text('ボタン'),
      ),
    ],
  ),
)

このウィジェットの親子関係の構造全体を「ウィジェットツリー」と呼びます。Flutterアプリは、この巨大なウィジェットツリーを構築することで、画面全体を定義しているのです。

🤖 AI活用プロンプト

特定のUIをどうやってウィジェットで実現すれば良いか分からない時は、AIに聞いてみましょう。 ``` 画面の中央に、プロフィール画像(円形)を置いて、その下にユーザー名(太字)、さらにその下に自己紹介文を縦に並べて表示したいです。

CircleAvatarとColumn、Textウィジェットを使ったコードを書いてください。 ```

ウィジェットの概念を理解することは、Flutterをマスターするための第一歩です。心配しないでください、実際にコードを書いていくうちに、自然とこの「すべてがウィジェット」という考え方に慣れていきます。