はじめに
Flutterは、UIを構築するための非常に柔軟なフレームワークで、数多くのWidgetが提供されています。これらのWidgetを理解し使いこなすことで、魅力的なUIを簡単に作成することができます。本記事では、Flutterでよく使用される主要なWidgetについて、サンプルコードとともに解説します。Flutter開発入門の前回の記事はこちら。
Text
Text
は、文字列を表示するためのシンプルなWidgetです。フォントスタイル、色、大きさなどを指定して、テキストをカスタマイズすることができます。
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('Flutter Text Widget'),
),
body: Center(
child: Text(
'Hello, Flutter!',
style: TextStyle(fontSize: 24, color: Colors.blue),
),
),
),
);
}
}
この例では、Text
Widgetを使用して「Hello, Flutter!」というテキストを青色で表示しています。style
プロパティを使って、フォントサイズや色をカスタマイズしています。
Image
Image
は、画像を表示するためのWidgetです。ネットワーク画像、ローカル画像、アセット画像を表示することができます。
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: const Text('Flutter Image Widget'),
),
body: Center(
child: Image.network(
'https://techgrowup.net/wp-content/uploads/2021/05/site-mobile-header-logo.png',
width: 300,
height: 200,
),
),
),
);
}
}
この例では、Image.network
を使用して、ネットワーク上の画像を表示しています。width
やheight
プロパティを使って、画像のサイズを指定しています。
Button
Button
は、ユーザーの操作を受け付けるためのインタラクティブなWidgetです。Flutterにはいくつかのボタンタイプがありますが、ここでは一般的なElevatedButton
を紹介します。
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: const Text('Flutter Button Widget'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
print('Button Pressed!');
},
child: const Text('Press Button'),
),
),
),
);
}
}
この例では、ElevatedButton
を使用して「Press Me」というテキストが表示されたボタンを作成しています。onPressed
プロパティにコールバックを指定し、ボタンが押されたときに動作するコードを定義します。
Container
Container
は、レイアウトや装飾を行うための多機能なWidgetです。サイズ、パディング、マージン、色、ボーダー、シャドウなどを設定できます。
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: const Text('Flutter Container Widget'),
),
body: Center(
child: Container(
width: 200,
height: 200,
padding: const EdgeInsets.all(20),
margin: const EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(15),
),
child: const Center(
child: Text(
'Hello!',
style: TextStyle(fontSize: 24, color: Colors.white),
),
),
),
),
),
);
}
}
この例では、Container
を使用して青色のボックスを作成し、その中にテキストを中央配置しています。padding
、margin
、BoxDecoration
プロパティを使用してレイアウトと装飾を行っています。
Card
Card
は、カードスタイルのUI要素を作成するためのWidgetです。マテリアルデザインに基づいており、影や角の丸みなどの装飾が適用されます。
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: const Text('Flutter Card Widget'),
),
body: Center(
child: Card(
elevation: 5,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15),
),
child: Container(
width: 300,
height: 150,
padding: const EdgeInsets.all(20),
child: const Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Card タイトル', style: TextStyle(fontSize: 24)),
SizedBox(height: 10),
Text('ここはカード情報の記述です.'),
],
),
),
),
),
),
);
}
}
この例では、Card
Widgetを使用して、タイトルと説明テキストを持つカードスタイルのUIを作成しています。elevation
で影の深さを指定し、shape
で角の丸みを設定しています。
Column & Row
Column
とRow
は、複数のWidgetを縦または横に並べるためのレイアウトWidgetです。MainAxisAlignment
やCrossAxisAlignment
プロパティを使って、子Widgetの配置を調整します。
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: const Text('Flutter Column & Row Widgets'),
),
body: const Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Icon(Icons.star, color: Colors.red, size: 50),
Icon(Icons.star, color: Colors.green, size: 50),
Icon(Icons.star, color: Colors.blue, size: 50),
],
),
SizedBox(height: 20),
Text('Stars Row', style: TextStyle(fontSize: 24)),
],
),
),
),
);
}
}
この例では、Column
とRow
を組み合わせて、縦と横に配置されたUIを構築しています。Row
でアイコンを横に並べ、Column
でその上にテキストを配置しています。
ListView
ListView
は、スクロール可能なリストを表示するためのWidgetです。複数の子Widgetをリスト形式で並べるのに便利で、動的なリストや長いリストにも対応します。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final items = List<String>.generate(100, (i) => "Item $i");
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter ListView Widget'),
),
body: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(items[index]),
);
},
),
),
);
}
}
この例では、ListView.builder
を使用して、100個のアイテムを持つリストを作成しています。itemBuilder
を使用して、各リスト項目を動的に生成しています。
AppBar
AppBar
は、マテリアルデザインの一部であるトップバーを提供するWidgetです。タイトル、アクションボタン、アイコンなどを簡単に追加できます。
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: const Text('Flutter AppBar Widget'),
actions: [
IconButton(
icon: const Icon(Icons.settings),
onPressed: () {
print('Settings pressed');
},
),
],
),
body: const Center(
child: Text('AppBar Example'),
),
),
);
}
}
この例では、AppBar
を使用してタイトルと設定アイコンを持つトップバーを作成しています。actions
プロパティを使って、右側にアクションボタンを追加しています。
Scaffold
Scaffold
は、Flutterのマテリアルデザインの基本的なレイアウト構造を提供するWidgetです。AppBar
やDrawer
、BottomNavigationBar
などを簡単に追加できます。
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: const Text('Flutter Scaffold Widget'),
),
body: const Center(
child: Text('Scaffold Example'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
print('FAB pressed');
},
child: const Icon(Icons.add),
),
),
);
}
}
この例では、Scaffold
を使用して基本的なアプリレイアウトを作成しています。AppBar
、Body
、FloatingActionButton
を簡単に設定でき、Flutterアプリの標準的なUI構成が整います。
まとめ
これらのFlutter Widgetを理解し使いこなすことで、より洗練されたUIを作成することができます。まずは各Widgetを使ったシンプルなアプリを作成し、その機能と役割を理解するところから始めましょう。
Flutter開発入門の次の記事はこちらです。