はじめに
前回はFlutterの環境構築を行いました。

第2回はFlutterのウィジェットについて学んでいきます。
Flutterを使ってアプリ開発を進めるうえで、まず理解しておくべきことのひとつが「ウィジェット」です。ウィジェットは、FlutterにおけるUIの構成要素であり、アプリ内で表示されるテキストやボタン、レイアウトの仕組みなど、すべてのUIがウィジェットによって作られています。
この記事では、基本的なFlutterウィジェットを初心者向けにわかりやすく解説し、アプリ開発を円滑に進められるようにします。ウィジェットの使い方に加えて、開発を効率化するためのHot Reloadやデバッグ方法についても紹介します。
Flutterウィジェットとは?
Flutterにおけるウィジェットは、アプリのUIを構築する基本単位です。各ウィジェットは画面上の要素(テキスト、ボタン、画像など)やレイアウトを表し、ウィジェット同士を組み合わせて複雑なインターフェースを作成できます。
Flutterウィジェットの特徴
- 階層的に構成される: Flutterでは、ウィジェットはツリー構造(ウィジェットツリー)で管理されており、親ウィジェットが子ウィジェットを持つ形で構築されます。
- 再利用可能: 同じウィジェットを異なる場所で再利用できるため、効率的にUIを構築できます。
- 柔軟性が高い: ウィジェットをカスタマイズすることで、ユーザーが必要とするUIを簡単に作成できます。
よく使う基本的なFlutterウィジェット
ここでは、Flutter開発で頻繁に使用される基本的なウィジェットを紹介します。
Text
Text
ウィジェットは、画面に文字列を表示するための最も基本的なウィジェットです。フォントサイズ、色、太字などのスタイルを指定することができます。
使い方
Text(
'Hello, Flutter!',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: Colors.blue),
)
説明
Text
は単純にテキストを表示するウィジェットです。style
を使って文字のサイズ、太さ、色などを調整できます。
実行してみた
下記コードで実際に実行してみました。
時間表記に被ってますが、ひとまずTextの表示はできました。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Text(
'Hello, Flutter!',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold, color: Colors.blue),
)
);
}
}

Container
Container
は、ウィジェットのレイアウトやスタイル(パディング、マージン、背景色など)を設定するために使われる、非常に汎用性の高いウィジェットです。
使い方:
Container(
padding: EdgeInsets.all(24.0),// padding指定
margin: EdgeInsets.all(80.0),// margin指定
color: Colors.blueAccent, //color指定
alignment: Alignment.center, // 要素の位置指定
child: Text(
'Hello, Flutter!',
style: TextStyle(
fontSize: 28,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
),
説明:
Container
は、その中に他のウィジェットを内包し、パディングやマージン、背景色を設定できます。- UI要素を囲むボックスとして使われ、レイアウトの制御が簡単に行えます。
実行してみた
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Container(
padding: EdgeInsets.all(24.0),
margin: EdgeInsets.all(80.0),
color: Colors.blueAccent,
alignment: Alignment.center, // これでContainer内のテキストを中央に配置
child: Text(
'Hello, Flutter!',
style: TextStyle(
fontSize: 28,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
),
);
}
}

Row
Row
ウィジェットは、複数のウィジェットを横に並べるために使用されます。横並びのレイアウトが必要な場合に便利です。
使い方:
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,// 等間隔
children: <Widget>[
Icon(Icons.star, color: Colors.red),
Icon(Icons.star, color: Colors.green),
Icon(Icons.star, color: Colors.blue),
],
)
説明:
Row
は子ウィジェットを横方向に並べます。mainAxisAlignment
を使って、ウィジェットの間隔や配置を調整できます。
実行してみた
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Icon(Icons.star, color: Colors.red),
Icon(Icons.star, color: Colors.green),
Icon(Icons.star, color: Colors.blue),
],
)
);
}
}

Column
Column
ウィジェットは、Row
の縦バージョンで、複数のウィジェットを縦に並べるために使います。
使い方:
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Column 1'),
Text('Column 2'),
Text('Column 3'),
],
)
説明:
Column
は子ウィジェットを縦方向に並べます。crossAxisAlignment
で縦方向の配置を指定し、列の幅を調整します。
実行してみた
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Column 1'),
Text('Column 2'),
Text('Column 3'),
],
)
);
}
}

ListView
ListView
は、スクロール可能なリストを作成するためのウィジェットです。大量のデータを表示する場合に使用されます。
使い方:
ListView(
padding: EdgeInsets.all(16.0), // 余白を追加
children: <Widget>[
Text('Item 1'),
Text('Item 2'),
Text('Item 3'),
Text('Item 4'),
Text('Item 5'),
],
),
説明:
ListView
は複数のアイテムをスクロール可能なリストとして表示します。ListTile
はリスト内の各項目のレイアウトを定義します。
実行してみた
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ListView(
padding: EdgeInsets.all(16.0), // 余白を追加
children: <Widget>[
Text('Item 1'),
Text('Item 2'),
Text('Item 3'),
Text('Item 4'),
Text('Item 5'),
],
),
);
}
}

Scaffold
Scaffold
は、Flutterアプリの基本的なUIレイアウトを提供するウィジェットです。アプリ全体の構造を管理し、ナビゲーションバーやフローティングボタンを含む標準的な画面の枠組みを作成します。
使い方:
Scaffold(
appBar: AppBar(title: Text('My App')),
body: Center(child: Text('Hello, Scaffold!')),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add),
),
)
説明:
Scaffold
はアプリのレイアウトのための基本的なウィジェットです。AppBar
やFloatingActionButton
を簡単に配置でき、画面全体を管理します。
実行してみた
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('My App')),
body: Center(child: Text('Hello, Scaffold!')),
floatingActionButton: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add),
),
)
);
}
}

Hot Reloadとデバッグ
Hot Reloadとは?
Flutterの開発中に大きな特徴となるのがHot Reload機能です。Hot Reloadを使うと、コードの変更をすぐにアプリに反映させることができ、開発効率が大幅に向上します。UIの変更やバグの修正を行う際に、アプリを再起動することなく、即座に結果を見ることができるため、開発のフローを中断することなく進められます。
使い方
flutter runを実行後、下記のような画面がコンソールに出てきます。
この中のrがHot reloadです。

r
– Hot reload (ホットリロード) 🔥🔥🔥
- コードの変更を即座に反映させるための機能です。状態(変数の値やアプリの状態など)を保持したまま、コードの変更部分だけを再コンパイルしてアプリに反映します。
- 開発中にUIのレイアウトやスタイルなどを頻繁に変更するときに便利です。
R
– Hot restart (ホットリスタート)
- アプリ全体をリセットして再起動します。アプリの状態もリセットされるため、最初からアプリを実行し直すのと同じ効果があります。
- 重大なコード変更(状態管理や初期化など)を行った際には、このホットリスタートが必要です。
h
– List all available interactive commands (すべてのインタラクティブコマンドの一覧表示)
- 利用可能な他のキーボードコマンドをリストアップします。このコマンドを入力すると、さらに多くの操作コマンドが表示されます。
d
– Detach (アプリを終了せずにflutter runを終了)
- アプリケーションをデバイス上でそのまま実行し続けるが、
flutter run
プロセス自体は終了します。 - 例えば、デバイス上でアプリをそのまま動かしておきたいが、ターミナルで他の作業をしたい場合などに便利です。
c
– Clear the screen (画面をクリア)
- ターミナルの出力をクリアして見やすくします。デバッグメッセージやログが多く出力された場合に使用します。
q
– Quit (アプリケーションを終了)
- 実行中のアプリケーションを完全に終了させ、デバイス上でのアプリ実行も停止します。これにより、
flutter run
プロセスも終了します。
デバッグ方法
Flutterでは、ビルドやランタイムエラー、UIの問題を簡単にデバッグできるツールが用意されています。以下は一般的なデバッグ方法です。
コンソールでエラーメッセージを確認
アプリがクラッシュしたりエラーが発生した場合、コンソールには詳細なエラーメッセージが表示されます。このメッセージを読み取り、原因を特定しましょう。
Flutter DevToolsを使用
Flutter DevToolsは、パフォーマンスのモニタリングやUIのデバッグ、ネットワークリクエストの追跡ができるツールです。アプリがどのように動作しているか、詳細に分析できます。
Dart:Open DevToolsで起動できます。

Breakpointを活用
VSCodeやAndroid Studioでは、デバッグモードでアプリを実行し、コードにブレークポイントを設定することで、アプリの特定の場所で処理を一時停止し、変数の値を確認したり処理の流れを追跡できます。

まとめ
Flutterの基本的なウィジェットの使い方を理解することで、アプリ開発の土台が築かれます。Text
やContainer
などのシンプルなウィジェットから、Row
やColumn
といったレイアウトの要素、Scaffold
でアプリ全体を管理するまで、基本的なウィジェットの使い方を押さえておきましょう。
さらに、Hot Reloadを活用することで、開発のスピードを格段に向上させることができます。エラーが発生した際は、コンソールやDevToolsを活用して、効率的にデバッグしましょう。
次回は、Dartの基本構文を行っていこうと思います。
第三回はこちら

コメント