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
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
20
iOS 26にアップデートすると実機でのHot Reloadができない?
umigishiaoi
0
590
My challenge to add Vision OS support in Flutter
umigishiaoi
0
150
Flutterだけでテトリス作ってみた
umigishiaoi
0
270
Featured
See All Featured
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
RailsConf 2023
tenderlove
30
1.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
How to build a perfect <img>
jonoalderson
1
6.2k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
300
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Utilizing Notion as your number one productivity tool
mfonobong
4
630
Abbi's Birthday
coloredviolet
4
10k
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