TOP(About this memo)) > 一覧(Flutter) > アーキテクチャ(レンダリング)
処理 | 内容 | サイクル |
---|---|---|
スクロールイベントの監視 | 画面からのスクロールイベントの検知 | イベントループ(実行環境のCPU性能依存?) |
ディスプレイのリフレッシュ | 表示するディスプレイのリフレッシュ。OSからシグナルがエンジンへ送られる。 | ディスプレイのリフレッシュレートに依存 |
スクロール画面のビルド・リビルド | リビルド対象のウィジェットについてレンダリングツリーの再構築が行われる ウィジェット次第だが多くの場合リビルドされると直後に再レイアウト・レンダリングも行われる。 |
毎フレーム *1 |
スクロール画面のレイアウト・再レイアウト | リビルド対象のウィジェットのレイアウト(各ウィジェットのサイズと位置)の再計算が行われる | 毎フレーム *1 |
スクロール画面のレンダリング・レンダリング | レンダリング対象のウィジェットの再描画が行われる | 毎フレーム *1 |
final controller = ScrollController();
controller.addListener(() {
print("${controller.position.pixels}, ${controller.position.maxScrollExtent}");
if (controller.position.pixels >= controller.position.maxScrollExtent) {
// ロード処理開始(非同期のデータのフェッチなど)
// ウィジェットがローディング表示をするためのフラグなどを変更する。
// setState(リビルド対象となる)
}
});
種類 | 役割 |
---|---|
SchedulerBinding | Engine と Framework のやり取りをしている Frame の間隔の管理など |
GestureBinding | ジェスチャー(画面をタップしたりとか)などのイベントを伝える役割 |
RendererBinding | Engine と Render Tree を繋ぐ役割 |
WidgetsBinding | Engine と Widget を繋ぐ役割 |
ServicesBinding | プラットフォームチャネルによって送信されたメッセージの処理 |
PaintingBinding | 画像キャッシュの処理 |
SemanticsBinding | セマンティクスに関連するすべての後の実装のために予約 |
TestWidgetsFlutterBinding | ウィジェット テスト ライブラリによって使用される |
This is the glue that binds the framework to the Flutter engine.
ウィジェットクラスの例 | createRenderObjectメソッドで生成されるRenderObject |
---|---|
RichText | RenderParagraph(extends RenderBox) |
TextButtonやIcon | RenderSemanticsAnnotations(extends RenderProxyBox) ※ 正確にはbuildメソッド内で生成されるSemanticsウィジェットが生成する |
SizedBoxやConstrainedBox | RenderConstrainedBox(extends RenderProxyBox)) |