この記事を書いた経緯
今回Flutterの学習をしている中でWidgetやコンストラクタの前になどにconstをつけることが多くなぜつけるのか気になり調べたものをまとめてみました。
FlutterでWidgetを定義する際、以下のようにconst
を付けることが推奨されるケースがあります。
const Text('Hello, Flutter!');
なぜconstをつけるのか?
FlutterにおいてWidgetにconst
をつける主な理由は、パフォーマンスの最適化にあります。
const
をつけることで、FlutterはそのWidgetが再描画や再ビルドされる必要がないことを明示的に理解します。
これにより、次のメリットが得られます。
1. ビルドパフォーマンスの向上
同じWidgetを何度も作成する必要がなく、メモリ上の同一インスタンスを再利用します。これにより、無駄なオブジェクト生成が減り、パフォーマンスが向上します。
2. 再描画の効率化
Widgetツリーに変更が生じた際、Flutterはconst
Widgetに関しては変更がないと判断し、その部分の描画をスキップできます。再描画範囲が最小限になり、レンダリング効率が高まります。
constを使うべきWidgetの特徴
以下の条件に該当するWidgetは、積極的にconst
を使いましょう。
- 変更される可能性がない(静的な)Widget
- 常に同じ内容を表示する(テキスト、アイコン、静的な装飾など)
- 親Widgetもconstとして定義されている
constを使った例
class MyWidget extends StatelessWidget {
const MyWidget({super.key});
@override
Widget build(BuildContext context) {
return const Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.star, size: 50),
SizedBox(height: 10),
Text('Hello, World!'),
],
),
);
}
}
constがつけられない場合
以下の条件に該当するWidgetは、const
をつけることができません。
- 実行時に動的に値が変わる(ユーザー入力やAPIのレスポンスを表示する場合など)
- 状態管理によって変化する値を表示する場合
こうしたWidgetでは無理にconst
をつけず、そのまま通常のインスタンスとして扱いましょう。
class DynamicWidget extends StatelessWidget {
final String dynamicText;
const DynamicWidget({super.key, required this.dynamicText});
@override
Widget build(BuildContext context) {
return Center(
child: Text(dynamicText), // ここは動的な値なのでconstがつけられない
);
}
}
まとめ
Flutterにおいてconstは、パフォーマンスを効率化し、不要な再描画を防ぐために積極的に活用すべきキーワードです。状況に応じてconstを適切に付けて、アプリのパフォーマンスを最適化しましょう。