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
Material designのWindow size classについて
Search
oyuk
June 20, 2023
Programming
1.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Material designのWindow size classについて
oyuk
June 20, 2023
More Decks by oyuk
See All by oyuk
Shorebird について
oyuk
0
490
Swiftでなんで[weak self]するのか?
oyuk
2
5.3k
LLVMについて調べた
oyuk
0
220
Swiftのmapからその次へ
oyuk
1
1.4k
Other Decks in Programming
See All in Programming
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
230
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
180
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
13k
Oxlintのカスタムルールの現況
syumai
6
1.1k
Agentic UI
manfredsteyer
PRO
0
190
dRuby over BLE
makicamel
2
390
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.8k
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
140
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
740
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
920
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
610
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Bash Introduction
62gerente
615
220k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
170
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
620
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Exploring anti-patterns in Rails
aemeredith
3
420
A better future with KSS
kneath
240
18k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
430
Designing Experiences People Love
moore
143
24k
Transcript
Material designのWindow size classについて potatotips #82 2023/6/20 oyuk
自己紹介 oyuk(@oydku) プログラマ 株式会社RelicでFlutterやってます。
Window size classとは? 画面サイズ毎に分割した区分の事 [1] https://m3.material.io/foundations/layout/applying-layout/window-size-classes#6e960b82-eff3-4f1b-92d3- 5edb5e338f49
Window size classとは? [2] https://m3.material.io/foundations/layout/applying-layout/window-size-classes
Window size classの用途 Window classに応じてコンポーネントの配置、表示状態を変更する事でより良いユーザー体 験を提供できる。 [3] https://m3.material.io/foundations/layout/applying-layout/window-size-classes#6e960b82-eff3-4f1b-92d3- 5edb5e338f49
Window size classの用途 Window class毎のデザイン作成方法 1. まず一つWindow classのデザインを作成する。 2. 次の5つの質問に回答していき、次のWindow
class sizeを作っていく。 i. 何が表示されるべきか? ii. 画面をどのように分割するか? iii. 何のサイズを変える必要があるか? iv. 何の位置を変える必要があるか? v. 何を交換する必要があるか?
Window size classの用途 1 何が表示されるべきか? 小さい画面では表示されていないコンポーネントが大きい画面では表示したほうが良い場合 がある。 画像ではpaneが表示状態がcompact、expandedで違っている。 [4] https://m3.material.io/foundations/layout/applying-layout/window-size-classes
Window size classの用途 2 画面をどのように分割するか? 一つのpaneはcompact,medium、二つのpaneはexpandedで使用すると良い。 [5] https://m3.material.io/foundations/layout/applying-layout/window-size-classes#64506ae2-f4c1-4810-8ee9- d2434ab8616c
Window size classの用途 3 何のサイズを変える必要があるか? compactでのコンポーネントのサイズはmedium,expandedでは大きくする事が可能である。 [6] https://m3.material.io/foundations/layout/applying-layout/window-size-classes#69b87bd8-6ed7-4df5-a91d- 04247c47ebe1
Window size classの用途 4 何の位置を変える必要があるか? Window classが大きくなればよりスペースが大きくなる。これに合わせてコンポーネントの 位置を変える事を検討する。 例 Cardの位置を変更する
コンテンツに二つ目のカラムを追加する
Window size classの用途 5 何を交換する必要があるか? Window classが変わると同様の機能を持つコンポーネントを交換する事ができる場合があ る。図はnavigation barをnavigation railに置き換えた例。
[7] https://m3.material.io/foundations/layout/applying-layout/window-size-classes#9a45abd4-d1cf-4001-a63b- dd5c4e823bd5
実装方法 AdaptiveScaffoldとAdaptiveLayoutというAPIが提供されている。 AdaptiveLayoutの方がカスタマイズ性が高い。 https://github.com/flutter/packages/tree/main/packages/flutter_adaptive_scaffold
実装方法 これらのコンポーネントが画面サイズに応じて何を表示するかを指定する。 [8] https://github.com/flutter/packages/tree/main/packages/flutter_adaptive_scaffold#adaptivelayout
実装方法 bodyを指定する場合 AdaptiveLayout( body: SlotLayout( config: <Breakpoint, SlotLayoutConfig>{ Breakpoints.small: SlotLayout.from(
key: const Key('Body Small'), builder: (_) => ListView.builder( itemCount: children.length, itemBuilder: (BuildContext context, int index) => children[index], ), ), Breakpoints.medium: SlotLayout.from( key: const Key('Body Medium'), builder: (_) => GridView.count(crossAxisCount: 2, children: children), ) }, ),
実装方法 topNavigation等も設定可能。 const AdaptiveLayout({ super.key, this.topNavigation, this.primaryNavigation, this.secondaryNavigation, this.bottomNavigation, this.body,
this.secondaryBody, this.bodyRatio, this.internalAnimations = true, this.bodyOrientation = Axis.horizontal, });
実装方法 画面サイズに応じてコンポーネントの出し分けができている。 small medium
実装方法 large