0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FlutterでWidgetにconstをつける理由

Posted at

この記事を書いた経緯

今回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を適切に付けて、アプリのパフォーマンスを最適化しましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?