Flutterアプリの既存コードの追い方

技術情報
技術情報

はじめに

本レポートでは、Flutterアプリケーションにおける既存コードの理解を深めるため、コントローラとページ間の処理の流れ、および State クラスの追い方について学習した内容をまとめます。
Flutterでは、画面を構成するWidgetと、その状態を管理するStateクラス、さらにビジネスロジックを担当するコントローラが連携して動作します。そのため既存コードを理解するためには、これらのクラス間の関係を把握し、処理の流れを順に追うことが重要になります。

ページとStateの構造

Flutterでは、画面はWidgetによって構成されます。特に状態を持つ画面の場合、StatefulWidgetとStateクラスの2つで構成されます。

基本的な構造は以下のようになります。

  • StatefulWidget(画面の定義)
  • State(画面の状態管理とUI構築)

StatefulWidgetは画面の定義を行うクラスであり、実際のUI構築や状態管理はStateクラスで行われます。
そのため既存コードを読む際には、まず対象となるページのWidgetクラスを確認し、その後対応するStateクラスを確認することで画面の処理を理解しやすくなります。

ページからStateを追う方法

StatefulWidgetでは、createState() メソッドによってStateクラスが生成されます。

例として以下のような構造があります。

class SamplePage extends StatefulWidget {
  @override
  _SamplePageState createState() => _SamplePageState();
}

この場合、画面の実際の処理は _SamplePageState クラスに記述されています。
そのためコードを読む際には、以下の手順で追うと理解しやすくなります。

  1. ページクラス(StatefulWidget)を確認する
  2. createState() で生成されるStateクラスを特定する
  3. Stateクラスの build() メソッドを確認する

この手順により、画面のUI構造と処理を把握することができます。

コントローラとの関係

Flutterアプリでは、画面の処理を整理するためにコントローラクラスを使用する場合があります。
コントローラには以下のような役割があります。

  • データ取得処理
  • 業務ロジック
  • 状態更新処理

Stateクラスでは、コントローラのメソッドを呼び出して処理を実行することが多くあります。
例えばボタン操作などのイベントが発生した場合、Stateクラスからコントローラのメソッドが呼び出されます。

そのため処理の流れを追う際には、

  1. UIイベント(onPressedなど)を確認する
  2. 呼び出されるメソッドを特定する
  3. コントローラの処理を確認する

という順序で確認すると、ユーザー操作から処理までの流れを理解しやすくなります。

ページ遷移の追い方

Flutterでは画面遷移は主に Navigator を使用して行われます。
そのため画面間の関係を理解するためには、Navigator の呼び出し箇所を確認することが重要です。

例えば以下のようなコードでページ遷移が行われます。

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => NextPage(),
  ),
);

この場合、NextPage が次の画面となるため、そのページクラスを確認し、同様に State クラスを追うことで画面構造を理解することができます。

go_router を用いたページ遷移

Flutterでは Navigator の代わりに、go_router パッケージを使用して画面遷移を実装することもできます。
go_router を利用する場合は、context.pushcontext.go が遷移処理となります。

例えば以下のように記述されます。

context.push('/testDetails', extra: dateTime);

ここでは /testDetails が遷移先ルートとなり、extra を用いてパラメータを渡すことができます。
そのため画面遷移を追う場合は、

  1. context.push / context.go を確認する
  2. 指定されているパスを特定する
  3. go_router のルート定義から該当ページを確認する

という手順で遷移先画面を特定できます。

学習を通して得られた知見

今回の学習を通して、Flutter の既存コードを理解するためには、以下の流れでコードを追うことが有効であると感じました。

  • ページ(Widget)を起点にする
  • 対応するStateクラスを確認する
  • UIイベントから処理を追う
  • 必要に応じてコントローラの処理を確認する
  • Navigatorを確認して画面遷移を理解する

このように画面構造と処理の流れの両方を意識してコードを読むことで、既存コードの理解がしやすくなると感じました。

まとめ

Flutterアプリケーションでは、ページ、Stateクラス、コントローラが連携して動作しています。
そのため既存コードを理解するためには、それぞれの役割を意識しながら処理の流れを追うことが重要です。
今回学習したコードの追い方を活用することで、既存のFlutterアプリの構造をより効率的に理解できると考えます。

Flutterに限らず、Web・サーバーサイド・インフラ・データなど、
領域を問わず技術探究を大切にしています。
日々の学びや気づきを活かしながら、より良いプロダクトを一緒につくりませんか?

技術を楽しみ、学び続ける仲間を募集中!
タイトルとURLをコピーしました