文系プログラマー「いお」が語る

主にプログラミング関連の記事を書いています。

【Flutter初心者用】Widget(ウィジェット)とは何か?

こんにちは!文系プログラマーいおです!

今回はFlutterアプリのWidgetについてまとめました。

 

 

Widgetとは?

Flutterアプリの画面UIを構築するための部品のことを「Widget」と呼びます。Flutterではこの「Widget」を様々組み合わせていくことで、画面を作成していきます。

 

サンプル

以下はFlutterプロジェクトを作成したときにデフォルトで作成されるサンプルコードです。

サンプルコード(main.dart

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

 

サンプルコードのWidget構成

サンプルコードのWidget構成を視覚的に表すと、以下のようにツリー状になります。

MyApp:サンプルのルートとなるWidget(任意名)
MaterialApp:マテリアルデザイン作成用のWidget(必ずScaffoldとともに使う)
MyHomePage:画面作成用のWidget(任意名)
Scaffold:マテリアルデザイン作成用のWidget(必ずMaterialAppとともに使う)
AppBar:アプリケーションバーを作成するためのWidget
Text:テキスト作成用のWidget
Center:中央寄せ用のWidget
Column:縦方向に子Widgetを並べるためのWidget
FloatingActionButton:アクションボタン作成用のWidget
Icon:アイコンを表示するWidget


以上のようにFlutterでは、Widgetをツリーのように様々に組み合わせてアプリの画面を構築していきます。

 

また一緒に以下の記事も読むことでさらに理解が深まると思います。

 

おわりに

最後に、下記で紹介している本には今回書いた内容を含めて、Flutterアプリの構成についてわかりやすくまとまっているのでおすすめです。

 

今回はここで終わりとなります。あなたのお役に立てていれば幸いです。
最後までお読みいただきありがとうございました!