【 Flutter 】Flutter を 基礎 から 学習 ( アーキテクチャ ) part235 「InheritedWidget」ウィジェットとは

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は アーキテクチャ ( part235 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( アーキテクチャ ) part234 「InheritedWidget」ウィジェットとは

引き続き、アーキテクチャについて学びます。

「InheritedWidget」ウィジェットとは

「InheritedWidget」ウィジェットを使ったサンプル

前回の続きとなります。
もう少し_HomePageofのメソッドを見ておきます。

 

この処理では先祖をたどって_MyInheritedWidgetを探しています。
なぜ探さないといけないかというと、_HomePageStateオブジェクトを保有しているからなんですね。
rebuildをする場合はdependOnInheritedWidgetOfExactTypeを呼び出して_HomePageStateオブジェクトを取得します。

rebuildをしない場合はgetElementForInheritedWidgetOfExactTypeを呼び出して_HomePageStateオブジェクトを取得します。

なぜ_HomePageStateオブジェクト取得に2種類の方法があるのでしょうか?

dependOnInheritedWidgetOfExactTypegetElementForInheritedWidgetOfExactTypeはともに計算量は同じようです。
O(1)・・・つまり一撃で目的のものを見つけることができるということです。

dependOnInheritedWidgetOfExactTypeはリビルドしますがgetElementForInheritedWidgetOfExactTypeリビルドしません。
だからrebuildをする場合はdependOnInheritedWidgetOfExactTypeを呼び出していたわけなんですね。

最後に

ちなみに同種のメソッドとしてfindAncestorWidgetOfExactTypeがあります。

これはO(n)・・・つまりウィジェットが100個あったら最大で100回検索するよ!ということしょう。

findAncestorWidgetOfExactTypeで取得できたSteteオブジェクトはrebuildが発生しないようです。

🤔

なぜ取得の仕方が違うだけでrebuildするしないが違うのかいまいちピンときませんね。
取得できたStateオブジェクトって同一のものではないということでしょうか?

今日はここまで!