Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SliverAppBarはなぜ変化する?~ Sliverを内側から理解する ~
Search
Aoi Umigishi
November 22, 2024
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SliverAppBarはなぜ変化する?~ Sliverを内側から理解する ~
Flutter Kaigi 2024
Aoi Umigishi
November 22, 2024
More Decks by Aoi Umigishi
See All by Aoi Umigishi
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
560
My challenge to add Vision OS support in Flutter
umigishiaoi
0
150
Flutterだけでテトリス作ってみた
umigishiaoi
0
260
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
WENDY [Excerpt]
tessaabrams
14
39k
Git: the NoSQL Database
bkeepers
PRO
432
67k
My Coaching Mixtape
mlcsv
0
320
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
The agentic SEO stack - context over prompts
schlessera
0
940
Game over? The fight for quality and originality in the time of robots
wayneb77
1
280
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
What's in a price? How to price your products and services
michaelherold
247
13k
Rails Girls Zürich Keynote
gr2m
96
14k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
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