【 Flutter 】Flutter を 基礎 から 学習 ( Flutterの内部構造 ) part223 ライフサイクル
「 基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は Flutterの内部構造 ( part223 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( Flutterの内部構造 ) part222 ライフサイクル
引き続き、ライブラリについて学びます。
ライフサイクル
StatefulWidget
StateクラスのsetStateメソッド
BuildOwner
クラスのscheduleBuildFor
メソッドを呼び出しまで来ました。
scheduleBuildFor
メソッドを呼び出すとonBuildScheduled
関数が呼ばれます。
onBuildScheduled
関数はさらにonBeginFrame
とonDrawFrame
の呼び出しを「要求」します。
要求するだけなので実際の処理はフレームワーク(Flutter?)自身が都合の良い時に実行するのです。
なのでこのscheduleBuildFor
メソッド完了段階でsetState
メソッドを何度呼び出しても画面の描画は起こらない・・・という理論なのだそうです。
このあたりにウィジェットツリーとエレメントツリーが存在する意味が記述されているようなのですが内容が難しくてついていけないです😅
最後に
ウィジェットとエレメントは参照関係で紐づいています。
ウィジェットになんらかの変更があった場合はウィジェット自身が「新しくインスタンス化」され、対応するエレメントは「新しくインスタンス化」された方を参照するようになります。
この「新しくインスタンス化」されたウィジェットは自身の配下にあるウィジェットツリーに対しても同じ処理を実行させます。
ただしウィジェットに変更がなかった場合は「新しくインスタンス化」されることはないです。
こうして再描画処理が重たくならないように工夫されているという理解をしました。
でもなぜこの処理で重たくならないのでしょうか?エレメントはウィジェットの参照を変えているだけだからですかね?
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません