๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(154)
CustomScrollView - SliverAppBar, SliverPersistentHeader, Scrollbar ์•™ ๋„˜ ๊ธฐ์•ผ์›ก.. SliverAppBar floating ๋ฐ‘์œผ๋กœ ์Šคํฌ๋กคํ•˜๋‹ค๊ฐ€ ์œ„๋กœ ํ•˜๋ฉด ์•ฑ๋ฐ” ์ž ๊น ๋ณด์ž„ pinned ์•ฑ๋ฐ” ์™„์ „ ๊ณ ์ • snap ์กฐ๊ธˆ๋งŒ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ๋‚ด๋ ค๋„ ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ์•ฑ๋ฐ” ์ด๋™ floating true์‹œ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ stretch ์•ฑ๋ฐ” ์‚ฌ์ด์ฆˆ ๋Š˜์ด๊ธฐ ๊ธฐ๋Šฅ expandedHeight / collapseHeight ์•ฑ๋ฐ” ํฌ๊ธฐ ๋Š˜์–ด๋‚˜๋Š” ์ตœ๋Œ€ ์‚ฌ์ด์ฆˆ / ์ตœ์†Œ ์‚ฌ์ด์ฆˆ flexibleSpace background, title ๋“ฑ ์ง€์ • ๊ฐ€๋Šฅ SliverPersistentHeader ๋จธ ์ด๋Ÿฐ ์ปจํ…Œ์ด๋„ˆ๋„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.. ScrollBar ์Šคํฌ๋กค๋ฐ”๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด SingleChildScrollView๋ฅผ Scrollbar ์œ„์ ฏ์œผ๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด ๋œ๋‹ค
CustomScrollView - SliverList, SliverGrid ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์œ„์ ฏ๋“ค์€ ์นผ๋Ÿผ ์•ˆ์— ๋„ฃ์—ˆ์„ ๋•Œ Expanded๋กœ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๋‚œ๋‹ค ์ด๋ก  ์ƒ ๋ฆฌ์ŠคํŠธ ๋ทฐ๋Š” ๋ฌดํ•œํ•œ ํฌ๊ธฐ๋ฅผ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค -> ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํฌ๊ธฐ ์ง€์ •ํ•ด์ฃผ๊ธฐ (GridView๋„ ๋งˆ์ฐฌ๊ฐ€์ง€) Slivers https://medium.flutterdevs.com/explore-slivers-in-flutter-d44073bffdf6 Explore Slivers In Flutter Using Slivers To Making Scrollable Layouts In Flutter medium.flutterdevs.com SliverAppBar slivers์˜ SliverAppBar() ์ด์šฉํ•ด ์•ฑ๋ฐ” ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค ์œ„ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•˜๋‹ˆ, background ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ด๋ฏธ์ง€ ์†Œ..
ReorderableListView https://api.flutter.dev/flutter/material/ReorderableListView-class.html ReorderableListView class - material library - Dart API A list whose items the user can interactively reorder by dragging. This sample shows by dragging the user can reorder the items of the list. The onReorder parameter is required and will be called when a child widget is dragged to a new position. link To cr api.flutter.d..
GridView GridView 1. ํ•œ ๋ฒˆ์— ๋‹ค ๊ทธ๋ฆผ ํผํฌ๋จผ์Šค ์ƒ ํšจ์œจ์ ์ด์ง„ ์•Š์€๋“ฏ crossAxisSpacing: 16.0, ์ขŒ์šฐ ๊ณต๋ฐฑ mainAxisSpacing: 30.0, ์œ„ ์•„๋ž˜ ๊ณต๋ฐฑ 2. ๋ณด์ด๋Š” ๊ฒƒ๋งŒ ๊ทธ๋ฆผ SliverGridDelegateWithFixedCrossAxisCount class ๊ต์ฐจ ์ถ•์— ๊ณ ์ •๋œ ํƒ€์ผ ์ˆ˜ ์‚ฌ์šฉํ•ด ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ ๋‹ค ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์ˆ˜์ง์ธ ๊ฒฝ์šฐ ์ด ๋Œ€๋ฆฌ์ž๋Š” ๊ณ ์ •๋œ ์ˆ˜์˜ ์—ด์ด ์žˆ๋Š” ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ ๋‹ค ๊ทธ๋ฆฌ๋“œ๊ฐ€ ์ˆ˜ํ‰์ธ ๊ฒฝ์šฐ ์ด ๋Œ€๋ฆฌ์ž๋Š” ๊ณ ์ •๋œ ์ˆ˜์˜ ํ–‰์ด ์žˆ๋Š” ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ ๋‹ค ์ด ๋Œ€๋ฆฌ์ž๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์™€ ๊ฐ„๊ฒฉ์˜ ํƒ€์ผ๋กœ ๊ทธ๋ฆฌ๋“œ ๋งŒ๋“ ๋‹ค 3. ์ตœ๋Œ€ ์‚ฌ์ด์ฆˆ SliverGridDelegateWithMaxCrossAxisExtent class ๊ฐ๊ฐ ์ตœ๋Œ€ ๊ต์ฐจ์ถ• ๋ฒ”์œ„๋ฅผ ๊ฐ–๋Š” ํƒ€์ผ๋กœ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ ๋‹ค ..
ListView ListView 1. ListView() ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜จ๋‹ค -> SingleChildScrollView์™€ ํผํฌ๋จผ์Šค ๋ฉด์—์„œ ๋‹ค๋ฅผ ๊ฒƒ์ด ๋งŽ์ด ์—†๋‹ค 2. ListView.builder() ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋จผ์ € ๊ฐ€์ ธ์˜จ๋‹ค 3. ListView.separated() ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋จผ์ € ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ์ถ”๊ฐ€๋กœ ์ค‘๊ฐ„์— ์ถ”๊ฐ€ํ•œ ์œ„์ ฏ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค ์˜ˆ์‹œ์—์„œ๋Š” separatorBuilder ์ถ”๊ฐ€ํ•ด 5๊ฐœ ์ธ๋ฑ์Šค๋งˆ๋‹ค ๋ฐฐ๋„ˆ ํ˜•์‹์œผ๋กœ ํ•˜๋‚˜์”ฉ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค
SingleChildScrollView SingleChildScrollView: ํ™”๋ฉด ์Šคํฌ๋กค ๊ธฐ๋Šฅ 1. ๊ธฐ๋ณธ ๋ Œ๋”๋ง๋ฒ• 2. ํ™”๋ฉด ๋„˜์–ด๊ฐ€์ง€ ์•Š์•„๋„ ์Šคํฌ๋กค๋˜๊ฒŒ ํ•˜๊ธฐ physics: AlwaysScrollableScrollPhysics(), //์Šคํฌ๋กค ๋จ physics: NeverScrollableScrollPhysics(), //์Šคํฌ๋กค ์•ˆ๋จ physics: ClampingScrollPhysics(), // Android ์Šคํƒ€์ผ physics: BouncingScrollPhysics(), //iOS ์Šคํƒ€์ผ ์œ„ ์ฝ”๋“œ ์ฐธ๊ณ ! ๊ธฐ๋ณธ - ์•„๋ž˜๋กœ ์Šคํฌ๋กค ๋‚ด๋ฆฌ๊ธฐ - ์œ„๋กœ ์Šคํฌ๋กค ์˜ฌ๋ฆฌ๊ธฐ 3. ํ™”๋ฉด ์œ„์ ฏ์ด ์ž˜๋ฆฌ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ Clip.none์œผ๋กœ ํ•ด์ฃผ๋ฉด ์•„๋ž˜๋กœ ์Šคํฌ๋กค ๋‚ด๋ ค๋„ ์œ„์ ฏ์ด ์ž˜๋ฆฌ์ง€ ์•Š๋Š”๋‹ค 4. ๊ทธ์™ธ ํผํฌ๋จผ์Šค ์ฐธ๊ณ  SingleChildScrollView ๋‹จ..
์บ˜๋ฆฐ๋” ์ผ์ •๊ด€๋ฆฌ ์•ฑ #8 ์Šค์ผ€์ค„์นด๋“œ ๋ˆŒ๋Ÿฌ ๊ธฐ์กด ์Šค์ผ€์ค„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ initialValue: initialValue, ์Šค์ผ€์ค„์นด๋“œ๋ฅผ ๋ˆŒ๋Ÿฌ ์—…๋ฐ์ดํŠธ ์‹œ ๊ธฐ์กด ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ…์ŠคํŠธํ•„๋“œ์— ๋‚จ์•„์žˆ๋„๋ก custom_textField.dart์˜ TextFormField์— initialValue๊ฐ’์„ ์ค€๋‹ค ์Šค์ผ€์ค„์นด๋“œ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ add์•„์ด์ฝ˜ ๋ˆŒ๋ €์„ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ bottom sheet ๋œจ๊ฒŒ ํ•œ๋‹ค ์Šค์ผ€์ค„ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ์— ์—๋Ÿฌ ์žˆ์œผ๋ฉด ์Šค์ผ€์ค„์„ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ•œ๋‹ค๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅํ•œ๋‹ค futureBuilder๊ฐ€ ์ฒ˜์Œ ์‹คํ–‰๋๊ณ , ๋กœ๋”ฉ์ค‘์ผ๋•Œ๋Š” CircularProgressIndicator๋ฅผ ๋„์šด๋‹ค future๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๊ฐ’์ด ์žˆ๋Š”๋ฐ ํ•œ ๋ฒˆ๋„ startTime์ด ์„ธํŒ…๋˜์ง€ ์•Š์•˜์„ ๋•Œ๋Š” ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค startInitialValue: startTim..
์บ˜๋ฆฐ๋” ์ผ์ •๊ด€๋ฆฌ ์•ฑ #7 ์•ฑ์—์„œ 2023๋…„ 8์›” 23์ผ์ž์— ์ผ์ • ํ•˜๋‚˜๋ฅผ ์ €์žฅํ–ˆ๋‹ค ๊ฐ’์ด ์ œ๋Œ€๋กœ ์ €์žฅ๋˜์—ˆ๋‹ค ์ผ์ •์„ ๋“ฑ๋กํ•œ ๋‚ ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์ผ์ •์ด ์ œ๋Œ€๋กœ ๋ณด์ด๊ณ  ํ•ด๋‹น ์ผ์ •์„ ๋“ฑ๋กํ•˜์ง€ ์•Š์€ ๋‚ ์„ ๋ˆ„๋ฅด๋ฉด ์ผ์ •์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค ํˆฌ๋ฐ์ด๋ฐฐ๋„ˆ์— ์Šค์ผ€์ค„ ๊ฐ’์€ ์•„์ง ์ˆ˜์ •ํ•ด์ฃผ์ง€ ์•Š์•„ ์ž„์˜๋กœ ๋„ฃ์–ด๋‘” 6์ด ๋œฌ๋‹ค ์นดํ…Œ๊ณ ๋ฆฌ ์ƒ‰์ƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ใ…Žใ……ใ…Ž if (snapshot.hasData) { schedules = snapshot.data! .where((element) => element.date.toUtc() == selectedDate) .toList(); } ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•„ํ„ฐ๋ง ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ ๋ชจ๋“  ์ผ์ •์„ ๋‹ค ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ์— ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋‹ค ์˜ฌ๋ผ๊ฐ„๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค(๋‚ญ๋น„) -> ์• ์ดˆ์— ์ฟผ๋ฆฌ ๋‚ ๋ ค ์ •๋ณด ๊ฐ€์ ธ์˜ฌ ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๊ฐ€์ ธ์˜ค๊ฒŒ ..

Tiny Star