カテゴリ: Flutterの状態管理 更新日: 2026/05/07

FlutterのsetStateの使い方と注意点を詳しく解説!状態更新の基本

289
setStateの使い方と注意点を詳しく解説!状態更新の基本

先生と生徒の会話形式で理解しよう

生徒

「FlutterのsetStateってよく使うって聞くんですが、どういうときに使うんですか?」

先生

「それはとても大切なテーマですね。setStateはFlutterで状態を更新して画面に反映させるための基本的な仕組みです。」

生徒

「何か特別な書き方があるんですか?使い方をちゃんと理解したいです!」

先生

「もちろん!それではsetStateの使い方や注意点を、実例を交えて詳しく見ていきましょう。」

1. setStateとは?Flutterにおける状態更新の基本

1. setStateとは?Flutterにおける状態更新の基本
1. setStateとは?Flutterにおける状態更新の基本

FlutterのsetState()は、ウィジェットの状態(State)を変更し、それに応じてUIを更新するための基本的なメソッドです。StatefulWidgetで状態を管理しているとき、何かしらの変化があった場合にsetStateを呼び出すことで、変更を反映させることができます。

ボタンを押したときにカウントが増える、チェックボックスをONにするなど、ユーザーの操作に反応して画面を動的に変化させたい場面で使われます。

2. setStateの基本的な書き方

2. setStateの基本的な書き方
2. setStateの基本的な書き方

それでは、実際にsetStateの基本的な使い方を見てみましょう。以下は、ボタンを押すたびにカウントが1つずつ増えるシンプルな例です。


import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: CounterPage(),
    );
  }
}

class CounterPage extends StatefulWidget {
  const CounterPage({super.key});

  @override
  State<CounterPage> createState() => _CounterPageState();
}

class _CounterPageState extends State<CounterPage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('setStateの基本')),
      body: Center(child: Text('カウント: $_counter', style: const TextStyle(fontSize: 30))),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        child: const Icon(Icons.add),
      ),
    );
  }
}

3. setStateでの状態変更はこのように反映される

3. setStateでの状態変更はこのように反映される
3. setStateでの状態変更はこのように反映される

setState()内で_counter++のように値を変更し、Flutterに「状態が変わったよ」と伝えることで、その変化に応じて該当ウィジェットが再描画されます。build()メソッドが再実行され、最新の状態が画面に反映される仕組みです。

Flutterを「実務レベル」で使えるようになりたい人や、 iPhone / Android両対応アプリ開発の流れをまとめて学びたい人には、 定番の実践書がこちらです。

Flutter実践開発をAmazonで見る

※ Amazon広告リンク

4. setStateの注意点!パフォーマンスと設計の落とし穴

4. setStateの注意点!パフォーマンスと設計の落とし穴
4. setStateの注意点!パフォーマンスと設計の落とし穴

便利なsetStateですが、使い方を間違えるとパフォーマンスや設計に悪影響を及ぼすことがあります。以下の点には特に注意しましょう。

  • 処理が重い関数をsetState内に書かない:画面の再描画が遅くなる原因になります。
  • 不要な範囲で再描画しない:setStateはウィジェット全体を再描画するため、必要最小限のスコープで使うのが望ましいです。
  • 非同期処理の中でsetStateを使うとき:Widgetが破棄されていないかをmountedで確認するのが安全です。

5. 非同期処理とsetStateの組み合わせに気をつけよう

5. 非同期処理とsetStateの組み合わせに気をつけよう
5. 非同期処理とsetStateの組み合わせに気をつけよう

非同期処理(Futureなど)の完了後にsetStateを使うケースでは、該当ウィジェットがまだ画面上にあるかをmountedでチェックするのが基本です。


void loadData() async {
  final data = await fetchSomeData();
  if (!mounted) return;
  setState(() {
    _data = data;
  });
}

このようにmountedを使って安全にsetStateを呼び出すことで、クラッシュやバグを防ぐことができます。

6. setStateはどんな時に使うべき?使わない方がいい場面も

6. setStateはどんな時に使うべき?使わない方がいい場面も
6. setStateはどんな時に使うべき?使わない方がいい場面も

setStateは小規模な状態変更には便利ですが、次のような場面では他の状態管理手法(ProviderやRiverpodなど)を使うのが適しています:

  • 複数の画面にまたがる状態を管理したいとき
  • 複雑なロジックや依存関係がある場合
  • テストのしやすさや再利用性を高めたいとき

特にアプリが大きくなってくると、setStateでは管理が追いつかなくなるため、段階的に状態管理パッケージの導入を検討しましょう。

7. Flutter初心者がsetStateを学ぶときのポイント

7. Flutter初心者がsetStateを学ぶときのポイント
7. Flutter初心者がsetStateを学ぶときのポイント

Flutterを初めて学ぶ方にとって、setStateはとても大切な基礎です。以下のポイントを意識すると理解が深まります。

  • 状態が変化するタイミングを意識する
  • StatefulWidgetStatelessWidgetの違いを理解する
  • UIのどの部分が再描画されるか確認しながら学習する

一度コードを書いて動かしてみることで、setStateの動作が自然と身についていきます。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

FlutterのsetState(セットステート)とは、具体的にどのような機能を持つメソッドなのですか?初心者にもわかりやすく教えてください。

FlutterのsetStateは、アプリ内の「状態(State)」が変化したことをフレームワークに通知し、画面の表示を最新の状態に更新(再描画)するための非常に重要な基本メソッドです。例えば、ユーザーがボタンをタップして数値が増えたり、チェックボックスのオン・オフを切り替えたりした際に、その変化を実際のスマホ画面に即座に反映させる役割を担っています。StatefulWidget(ステートフルウィジェット)を利用しているプロジェクトにおいて、動的なUIを実現するためには欠かせない仕組みと言えます。
Flutterの状態管理の一覧へ
新着記事
Flutter
Flutterでのリポジトリパターンの実装例
Flutterでリポジトリパターンを実装する方法を完全解説!初心者向けアーキテクチャ設計入門
Java
Java の Objects クラスを使って null チェックを簡単にする方法
JavaのObjectsクラスの使い方を完全ガイド!nullチェックを簡単・安全に行う方法
Java
Java の UUID クラスを使って一意の識別子を作成する方法
JavaのUUIDクラスの使い方を完全ガイド!初心者でもわかる一意な識別子の作成方法
Java
Java の古い日付クラス(Date, Calendar)と新しい日付 API の違い
JavaのDateとCalendarと新しい日付APIの違いとは?初心者向け完全ガイド
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク