BuildContextをざっくり理解する

 ・ 1 min

photo by Wolfgang Hasselmann on Unsplash

Flutterではどのウィジェットにもbuildメソッドが存在します。buildメソッドの引数には常にBuildContext型のcontext変数を受け取っています。
build段階でcontextを使うと、実装すべきbuildメソッドを持つウィジェットが親ウィジェットやそれより上にある情報をcontextを通じて取得できます。

ex) Provider.of(context), Theme.of(context), Scaffold.of(context), Navigator.of(context), MediaQuery.of(context) など

探したいウィジェットをWidget treeという方式でtreeデータ構造を使い、そのウィジェットの位置から親を遡って巡回しながら目的のウィジェットを検索します。

build関数の実行が終わって返されると、そのウィジェットはcontextに登録され、それ以降他のウィジェットから見つけられるようになります。

image

Flutterでウィジェットを画面に描画するために処理される順序
Widget -> Element -> RenderObject -> Canvas

クラスにWidgetという単語があるか、そのような名前を持つオブジェクトを継承していればウィジェットツリーで実装されます。
クラスにElementという単語があるか、そのような名前を持つオブジェクトを継承していればエレメントツリーで実装されます。
クラスにRenderObjectという単語があるか、そのような名前を持つオブジェクトを継承していればレンダーツリーで実装されます。

buildメソッドが呼ばれるケース

  • initStateを呼び出した後
  • didUpdateWidgetを呼び出した後
  • setStateが呼ばれた後
  • Stateオブジェクトが変更された後
  • Stateオブジェクトが非アクティブになり、ツリーの別の位置に再挿入された後

Flutterアニメーションの原理はこちらのリンクが参考になります。Turing Apple & Flutter Seoul


To be of use to the world is the only way to be happy.

— Hans Christian Andersen


他の投稿
Flutterの機能開発の順序 커버 이미지
 ・ 4 min

Flutterの機能開発の順序

iPhoneからlocalhostにアクセスする 커버 이미지
 ・ 1 min

iPhoneからlocalhostにアクセスする

Flutterレンダリングエラーを調べる 커버 이미지
 ・ 7 min

Flutterレンダリングエラーを調べる