Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SliverAppBarはなぜ変化する?~ Sliverを内側から理解する ~
Search
Aoi Umigishi
November 22, 2024
0
95
SliverAppBarはなぜ変化する?~ Sliverを内側から理解する ~
Flutter Kaigi 2024
Aoi Umigishi
November 22, 2024
Tweet
Share
More Decks by Aoi Umigishi
See All by Aoi Umigishi
My challenge to add Vision OS support in Flutter
umigishiaoi
0
74
Flutterだけでテトリス作ってみた
umigishiaoi
0
180
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Designing Experiences People Love
moore
140
23k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
We Have a Design System, Now What?
morganepeng
51
7.4k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Facilitating Awesome Meetings
lara
53
6.3k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Optimizing for Happiness
mojombo
377
70k
Unsuck your backbone
ammeep
669
57k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Transcript
SliverAppBarはなぜ変化する? ~ Sliverを内側から理解する ~ Aoi Umigishi Flutter Kaigi 2024
SliverAppBarの例
SliverAppBarがスクロールに応じて 大きさが変化するのはなぜ? 疑問 仕組みを理解したい!
解決方法 Flutterの仕組みを理解するには? 内部コードを読む!
本発表で話すこと Sliver 並びにSliver App Bar について、 内部コードから理解した仕組みの解説
Sliver とは RenderSliverプロトコルによって 描画されるWidget ※ プロトコル = 画面描画の仕組み
画面描画プロトコルの例 ・RenderSliver プロトコル ・RenderBox プロトコル ※ RenderBox,RenderSliverは RenderObjectのサブクラス
RenderObjectとは Widgets Elements Render Objects Flutterの主要な3つのツリー
Widgets Elements Render Objects Flutterの主要な3つのツリー 構成要素の設定値を管理するもの RenderObjectとは
Widgets Elements Render Objects Flutterの主要な3つのツリー 構成要素の実体を管理するもの RenderObjectとは
Widgets Elements Render Objects Flutterの主要な3つのツリー 画面描画を管理するもの RenderObjectとは
RenderObjectの主要なメソッド ・performLayout ・paint ・describeSemanticsConfiguration
RenderObjectの主要なメソッド ・performLayout ・paint ・describeSemanticsConfiguration サイズと位置を決定する
Constraints go down. Sizes go up. Parent sets position. Understanding
constraintsより https://docs.flutter.dev/ui/layout/constraints サイズと位置を決定する考え方
画面描画プロトコルの例 ・RenderSliver プロトコル ・RenderBox プロトコル
サイズと位置の決定の例 85 60 20 30 子 1 子 2 250
このレイアウトの決定の流れを見ていく
親から幅と高さの制約の指定 250 85 サイズと位置の決定の例
子1に制約を伝える 240 75 上下左右5の Padding サイズと位置の決定の例
子1のサイズの決定 240 75 子 1 20 サイズと位置の決定の例
子2に伝える制約の決定 240 75 子 1 サイズと位置の決定の例 55 20
子2のサイズの決定 90 75 サイズと位置の決定の例 30 子 2 子 1 20
位置の決定 90 75 サイズと位置の決定の例 30 子 2 子 1 20
自身のサイズの決定 60 サイズと位置の決定の例 30 子 2 子 1 20 250
画面描画プロトコルの例 ・RenderSliver プロトコル ・RenderBox プロトコル
RenderSliver プロトコル SliverConstraints と SliverGeometry による、 スクロールに対する画面描画プロトコル
画面描画プロトコルの例 ・RenderSliver プロトコル ・RenderBox プロトコル → 中身を全てレイアウトし描画 → 画面に映る部分のみ描画
RenderSliver プロトコル 描画範囲 (Viewport) SliverList SliverGrid SliverList サイズ計算されない 描画される
SliverConstraints スクロール方向や量 画面描画範囲に対するオフセット量
SliverConstraints ・RenderSliver ・RenderBox
描画サイズ 描画位置 SliverGeometry 描画されるか否か
SliverGeometry ・RenderBox ・RenderSliver
RenderSliver プロトコル Viewport SliverList Child SliverConstraints SliverConstraints
RenderSliver プロトコル Viewport SliverList Child SliverGeometry SliverGeometry
RenderSliver プロトコルの利用例 - ListView - GridView - CustomScrollView - etc
…
例:CustomScrollView
例:ScrollView
例:ScrollView
例:ScrollView Viewportにスクロール位置を伝えている
例:ScrollView スクロール位置
例:ScrollView スクロール位置
SliverAppBarはなぜ変化する?
SliverAppBarはなぜ変化する? SliverConstraintsから、大きさを計算 animation value
SliverAppBarはなぜ変化する? SliverGeometoryを更新
SliverAppBarはなぜ変化する? スクロール方向、量によってアニメーションを開始
Flutter 3.24で追加されたSliver SliverResizingHeader PinnedHeaderSliver
PinnedHeaderSliver PinnedHeaderSliver class API ドキュメントより https://api.flutter.dev/flutter/widgets/SliverResizingHeader- class.html
SliverResizingHeader SliverResizingHeader class API ドキュメントより https://api.flutter.dev/flutter/widgets/SliverResizingHeader-class .html
まとめ SliverAppBarがスクロールに応じて 大きさが変化するのはなぜ? スクロールに応じた画面描画の仕組み (RenderSliver プロトコル)があるから !
ご清聴ありがとうございました! Aoi Umigishi フリーランスエンジニア SNS等
参考文献 【Flutter】Sliverの仕組みを理解する https://zenn.dev/3ta/articles/5a439a8f0c4b62 Flutter API reference documentation https://api.flutter.dev/ Understanding constraints
https://docs.flutter.dev/ui/layout/constraints