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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Aoi Umigishi
November 22, 2024
0
160
SliverAppBarはなぜ変化する?~ Sliverを内側から理解する ~
Flutter Kaigi 2024
Aoi Umigishi
November 22, 2024
Tweet
Share
More Decks by Aoi Umigishi
See All by Aoi Umigishi
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
460
My challenge to add Vision OS support in Flutter
umigishiaoi
0
120
Flutterだけでテトリス作ってみた
umigishiaoi
0
230
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
600
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
First, design no harm
axbom
PRO
2
1.1k
Tell your own story through comics
letsgokoyo
1
830
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
190
What's in a price? How to price your products and services
michaelherold
247
13k
Crafting Experiences
bethany
1
77
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
87
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
200
Skip the Path - Find Your Career Trail
mkilby
1
72
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