docs

TOP(About this memo)) > 一覧(Flutter) > アーキテクチャ(レンダリング)

Flutterのレンダリングモデル

レンダリングエンジン

描画(レンダリング)の流れ

(参考)(IME)フレーム処理の例

具体例:スクロール処理

処理 内容 サイクル
スクロールイベントの監視 画面からのスクロールイベントの検知 イベントループ(実行環境のCPU性能依存?)
ディスプレイのリフレッシュ 表示するディスプレイのリフレッシュ。OSからシグナルがエンジンへ送られる。 ディスプレイのリフレッシュレートに依存
スクロール画面のビルド・リビルド リビルド対象のウィジェットについてレンダリングツリーの再構築が行われる
ウィジェット次第だが多くの場合リビルドされると直後に再レイアウト・レンダリングも行われる。
毎フレーム *1
スクロール画面のレイアウト・再レイアウト リビルド対象のウィジェットのレイアウト(各ウィジェットのサイズと位置)の再計算が行われる 毎フレーム *1
スクロール画面のレンダリング・レンダリング レンダリング対象のウィジェットの再描画が行われる 毎フレーム *1

Bindingの種類

種類 役割
SchedulerBinding Engine と Framework のやり取りをしている Frame の間隔の管理など
GestureBinding ジェスチャー(画面をタップしたりとか)などのイベントを伝える役割
RendererBinding Engine と Render Tree を繋ぐ役割
WidgetsBinding Engine と Widget を繋ぐ役割
ServicesBinding プラットフォームチャネルによって送信されたメッセージの処理
PaintingBinding 画像キャッシュの処理
SemanticsBinding セマンティクスに関連するすべての後の実装のために予約
TestWidgetsFlutterBinding ウィジェット テスト ライブラリによって使用される

(参考)WidgetsFlutterBinding.ensureInitialized()

Widget, Element, RenderObjectの3つの構造

Widget

RenderObjectWidget

StatelessWidget

StatefulWidget

ProxyWidget

_NullWidget

Element

ComponentElement

RenderObjectElement

ElementはBuildContextによって抽象化されている

RenderObject

(参考)レンダーツリーの計算

(参考)WidgetsBinding.instance.addPostFrameCallback