【 Flutter 】Flutter を 基礎 から 学習 ( Flutterの内部構造 ) part223 ライフサイクル

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は Flutterの内部構造 ( part223 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Flutterの内部構造 ) part222 ライフサイクル

引き続き、ライブラリについて学びます。

ライフサイクル

StatefulWidget

StateクラスのsetStateメソッド

BuildOwnerクラスのscheduleBuildForメソッドを呼び出しまで来ました。
scheduleBuildForメソッドを呼び出すとonBuildScheduled関数が呼ばれます。
onBuildScheduled関数はさらにonBeginFrameonDrawFrameの呼び出しを「要求」します。
要求するだけなので実際の処理はフレームワーク(Flutter?)自身が都合の良い時に実行するのです。
なのでこのscheduleBuildForメソッド完了段階でsetStateメソッドを何度呼び出しても画面の描画は起こらない・・・という理論なのだそうです。

このあたりにウィジェットツリーとエレメントツリーが存在する意味が記述されているようなのですが内容が難しくてついていけないです😅

最後に

ウィジェットとエレメントは参照関係で紐づいています。
ウィジェットになんらかの変更があった場合はウィジェット自身が「新しくインスタンス化」され、対応するエレメントは「新しくインスタンス化」された方を参照するようになります。
この「新しくインスタンス化」されたウィジェットは自身の配下にあるウィジェットツリーに対しても同じ処理を実行させます。
ただしウィジェットに変更がなかった場合は「新しくインスタンス化」されることはないです。

こうして再描画処理が重たくならないように工夫されているという理解をしました。
でもなぜこの処理で重たくならないのでしょうか?エレメントはウィジェットの参照を変えているだけだからですかね?

今日はここまで!