この記事では、Flutterのdecoration: BoxDecorationについて書いていきます。
decoration: BoxDecorationとは
デコレーション:ボックス・デコレーションと読みます。
- decoration: (デコレーション)装飾
- BoxDecoration(ボックス・デコレーション)箱の装飾
コンテナなどの親ウィジェットに対して装飾(背景色・枠線・角丸・影・グラデーションなど)の変化をつけます。BoxDecotionクラスはそのプロパティで枠線や背景色などのスタイルを設定します。
サンプル
31行目からはdecoration: BoxDecorationを指定しています。
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(
home: Scaffold(
appBar: AppBar(title: const Text('MainAxisAlignment sample')),
body: Center(
child: Column(
// 主軸(縦方向)の中央に配置
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
width: 200,
height: 100,
// 外側の余白
margin: const EdgeInsets.all(16.0),
// 内側の余白
padding: const EdgeInsets.all(12.0),
// 子要素の配置(中央寄せ)
alignment: Alignment.center,
// デザインの装飾(※ color は decoration の中に書く必要があります)
decoration: BoxDecoration(
color: Colors.blue, // 背景色
borderRadius: BorderRadius.circular(12.0), // 角丸
border: Border.all(color: Colors.black, width: 2), // 枠線
boxShadow: const [
BoxShadow(
color: Colors.grey,
blurRadius: 5.0,
offset: Offset(2, 2), // 影
),
],
),
// 中身のウィジェット
child: const Text(
'Containerの例',
style: TextStyle(color: Colors.white),
),
),
Container(
width: 200,
height: 100,
// 外側の余白
margin: const EdgeInsets.all(16.0),
// 内側の余白
padding: const EdgeInsets.all(12.0),
// 子要素の配置(中央寄せ)
alignment: Alignment.center,
// デザインの装飾(※ color は decoration の中に書く必要があります)
decoration: BoxDecoration(
color: const Color.fromARGB(255, 3, 252, 102), // 背景色
borderRadius: BorderRadius.circular(12.0), // 角丸
border: Border.all(color: Colors.black, width: 2), // 枠線
boxShadow: const [
BoxShadow(
color: Colors.grey,
blurRadius: 5.0,
offset: Offset(2, 2), // 影
),
],
),
// 中身のウィジェット
child: const Text(
'Containerの例',
style: TextStyle(color: Colors.red),
),
)
],
),
),
),
);
}
}プロパティ
よく使うプロパティをまとめました。
| プロパティ名 | 型 | 概要・用途 |
|---|---|---|
| color | Color? | 背景色を指定します。 |
| image | DecorationImage? | 背景画像(AssetImage や NetworkImage など)を指定します。 |
| border | BoxBorder? | 枠線(上下左右または全体)を指定します(例: Border.all())。 |
| borderRadius | BorderRadiusGeometry? | 角の丸みを指定します(例: BorderRadius.circular(8))。 |
| boxShadow | List<BoxShadow>? | 要素に落とす影のリストを指定します。 |
| gradient | Gradient? | 背景のグラデーション(LinearGradient, RadialGradient など)を指定します。 |
| backgroundBlendMode | BlendMode? | 背景色・グラデーションと背景画像の合成モードを指定します。 |
| shape | BoxShape | 形状を指定します(BoxShape.rectangle または BoxShape.circle)。 |
