【 Flutter 】Flutter を 基礎 から 学習 ( アーキテクチャ ) part235 「InheritedWidget」ウィジェットとは
「 基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は アーキテクチャ ( part235 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( アーキテクチャ ) part234 「InheritedWidget」ウィジェットとは
引き続き、アーキテクチャについて学びます。
「InheritedWidget」ウィジェットとは
「InheritedWidget」ウィジェットを使ったサンプル
前回の続きとなります。
もう少し_HomePage
のof
のメソッドを見ておきます。
この処理では先祖をたどって_MyInheritedWidget
を探しています。
なぜ探さないといけないかというと、_HomePageState
オブジェクトを保有しているからなんですね。
rebuild
をする場合はdependOnInheritedWidgetOfExactType
を呼び出して_HomePageState
オブジェクトを取得します。
rebuild
をしない場合はgetElementForInheritedWidgetOfExactType
を呼び出して_HomePageState
オブジェクトを取得します。
なぜ_HomePageState
オブジェクト取得に2種類の方法があるのでしょうか?
dependOnInheritedWidgetOfExactType
とgetElementForInheritedWidgetOfExactType
はともに計算量は同じようです。
O(1)・・・つまり一撃で目的のものを見つけることができるということです。
dependOnInheritedWidgetOfExactType
はリビルドしますがgetElementForInheritedWidgetOfExactType
リビルドしません。
だからrebuild
をする場合はdependOnInheritedWidgetOfExactType
を呼び出していたわけなんですね。
最後に
ちなみに同種のメソッドとしてfindAncestorWidgetOfExactType
があります。
これはO(n)・・・つまりウィジェットが100個あったら最大で100回検索するよ!ということしょう。
findAncestorWidgetOfExactType
で取得できたSteteオブジェクトはrebuild
が発生しないようです。
🤔
なぜ取得の仕方が違うだけでrebuild
するしないが違うのかいまいちピンときませんね。
取得できたStateオブジェクトって同一のものではないということでしょうか?
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません