์ง๋ ์๊ฐ์ Column์ ๋ํด ์ ๋ฆฌํ์๋ค. ์ค๋ ์ ๋ฆฌํ ๋ด์ฉ์ Column์ผ๋ก ์์ ฏ๋ค์ ๋ณด์ฌ์ค ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ฃผ๋ ๋ ๋ค๋ฅธ ์์ ฏ์ด๋ค.
import 'package:flutter/material.dart';
void main() {
return runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("Column ์์ "),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
verticalDirection: VerticalDirection.up,
children: <Widget>[
Container(
height: 100,
color: Colors.red,
),
Container(
height: 100,
color: Colors.blue,
),
Container(
height: 100,
color: Colors.green,
),
Container(
height: 100,
color: Colors.black,
),
Container(
height: 100,
color: Colors.indigo,
),
Container(
height: 100,
color: Colors.greenAccent,
),
Container(
height: 100,
color: Colors.white,
),
],
),
),
);
}
}
์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
verticalDirection
์ ์ํด ์๋์์ ์ ๋ฐฉํฅ์ผ๋ก Container
๊ฐ ์ ์ฌ(?) ๋์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ ๋งจ ์๋์ ์๋ ๋นจ๊ฐ์ Contiainer๊ฐ ๋น์ ์์
์ผ๋ก ์ถ๋ ฅ๋๋ค. ๊ทธ ์ด์ ๋ ๊ธฐ๊ธฐ์ ํ๋ฉด ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋ฌ๊ธฐ
๋๋ฌธ์ด๋ค. ๋นจ๊ฐ์ Container๊ฐ ํ์ํ ๋ฒ์๋ ๊ธฐ๊ธฐ์ MaxHeight๋ฅผ ๋ฒ์ด๋ ๋ถ๋ถ์ด ํฌํจ๋๋ฏ๋ก ์ ๋ ๊ฒ Overflow
๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น?
๋ฐฉ๋ฒ์ ํฌ๊ฒ SingleChildScollView
์ ListView
๋ก ๋ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
SingleChildScrollView
๋จผ์ SinglechildScrollView
๋ฅผ ์ดํด๋ณด์.
SingleChildScrollView SingleChildScrollView({
Key? key,
Axis scrollDirection = Axis.vertical,
bool reverse = false,
EdgeInsetsGeometry? padding,
bool? primary,
ScrollPhysics? physics,
ScrollController? controller,
Widget? child,
DragStartBehavior dragStartBehavior = DragStartBehavior.start,
Clip clipBehavior = Clip.hardEdge,
String? restorationId,
ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual
})
์ญ์ ๋ค์ํ ์์ฑ๋ค์ด ์กด์ฌํ๋ค. ์ง๊ธ๊น์ง ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ 7๊ฐ ์ ๋์ ์ดํ์ ํด๋ก ์ฝ๋ฉ ํ๋๋ฐ ๋ชจ๋ ์์ฑ๋ค์ ๋ค ์ฌ์ฉํด๋ณธ ์ ์ ์๋ค. ์์ ฏ์ ์ฌ์ฉ ์ฉ๋๋ ์์์ ๋งํ ๊ฒ์ฒ๋ผ ์คํฌ๋กค์ ํตํด ํ๋ฉด์ ์ข ๋ ์ ์ฐํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ด๋ค.
Column์ ๋ถ๋ชจ ์์ ฏ์ผ๋ก SingleChildScrollView
๋ฅผ ์ถ๊ฐํ๊ณ ์๋ก ๋น๋๋ฅผ ํด๋ณด๋ฉด ์๋ ค์ ๋ณด์ด์ง ์๋ ๋ถ๋ถ๊น์ง ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด ์์ ฏ์ ์ด์ฉํ๋ฉด ํ๋ฉด์ ์คํฌ๋กค ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ๋ผ ์-์๋
, ํน์ ์ข-์ฐ
๋ก ํ๋ฉด์ ์์ง์ผ ์ ์๊ฒ ๋๋ค.
ListView
LIstView
์ญ์ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ ์ค์ ํ๋์ด๋ค. ์ฐ์ ์์ ฏ์ ์ดํด๋ณด์.
ListView ListView.builder(
Key? key,
Axis scrollDirection = Axis.vertical,
bool reverse = false,
ScrollController? controller,
bool? primary,
ScrollPhysics? physics,
bool shrinkWrap = false,
EdgeInsetsGeometry? padding,
double? itemExtent,
required Widget Function(BuildContext, int) itemBuilder,
int? itemCount,
bool addAutomaticKeepAlives = true,
bool addRepaintBoundaries = true,
bool addSemanticIndexes = true,
double? cacheExtent,
int? semanticChildCount,
DragStartBehavior dragStartBehavior = DragStartBehavior.start,
ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual,
String? restorationId,
Clip clipBehavior = Clip.hardEdge
})
์์ฒญ๋๊ฒ ๋ง์ ์์ฑ๋ค์ด ์กด์ฌํ๋ค. ๊ฐ์ฅ ์ค์ํ ํต์ฌ ์์ฑ์ itemBuilder
์ itemCount
์ด๋ค. ItemBuilder๋ LIstView๋ก ๋ณด์ฌ์ค ์์ ฏ๋ค, itemCount๋ ์ด ์์ ฏ๋ค์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
์์ง ์ดํด๊ฐ ์๊ฐํ ๋ ์๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด๋ณด์.
import 'package:flutter/material.dart';
void main() {
return runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("ListView ์์ "),
),
body: ListView.builder(
itemBuilder: (context, index) {
return Container(
height : 100,
decoration: BoxDecoration(
border : Border.all(
color : Colors.grey,
width: 10,
),
),
);
},
itemCount: 10,
)
),
);
}
}
itemBuilder
๋ ์ธ์๋ก context
์ index
๋ฅผ ๊ฐ๋๋ฐ context๋ ์ฝ๊ฒ ๋งํด ์์ ฏ์ ์์น, index๋ ์์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฌ์ค context์ ๋ํด์๋ ์ ๋๋ก ์ง๊ณ ๋์ด๊ฐ์ผํ๋๋ฐ ์ฐ์ ์์ ฏ์ ์์น๋ผ๊ณ ์ ์ํ๊ณ ๋ค์์ ์ถ๊ฐ์ ์ผ๋ก ์ค๋ช
ํ๊ฒ ๋ค. ์ด๋ ๊ฒ itemBuilder๋ฅผ ์ ์ธํ๊ณ itemCount์ ํ์ํ ์์ ฏ์ ๊ฐ์๋ฅผ ์ ์ด์ค๋ค. ์ง๊ธ์ ์ฐ์ 10์ด๋ผ๊ณ ์ ํด์คฌ์ง๋ง ๋ฆฌ์คํธ์ length์ ๊ฐ์ intํ ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
์ ์ฝ๋๋ก ๋น๋๋ฅผ ํด๋ณด๋ฉด ์๋์ฒ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
์ญ์ ์คํฌ๋กค์ ํตํด์ ์-์๋
๋ก ์์ง์ผ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ListVIew
์ SingleChildScrollView
๋ ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ธ๊ฐ? (์๋ฐํ ์๊ธฐํ์๋ฉด ListVIew
์ SingleChildScrollView + Column
์ ๋น๊ตํ๋๊ฒ ๋ง๋ค.) ListView
๋ ๋์ผํ ์์ ฏ์ ๋ฆฌ์คํธ๋ก ๋ณด์ฌ์ค ๋(ex. ์ฃผ์๋ก)์ ์ฌ์ฉํ๋ฉด ์ข๊ณ SingleChildScrollView + Column
์ ๊ฒฝ์ฐ ์๋ก ๋ค๋ฅธ ์์ ฏ์ ๋ณด์ฌ์ฃผ๋ ์์ ฏ๋ค์ด ํ๋ฉด์ ์์ญ์ ์ด๊ณผํ์ฌ ์คํฌ๋กค์ด ํ์ํ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํ์ง๋ง ๋ ๊ฐ ๋ชจ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๊ธฐ์ UI๋ฅผ ๋ ๋๋งํ ๋ ํ๋ฉด ๋ฐ๊นฅ์ ์กด์ฌํ๋ ์์ดํ ๊น์ง ๋ชจ๋ ๋ ๋๋ง ํ๋ค๋ ๊ฒ์ด๋ค. ์์์ ์์ฑํ ์ฝ๋์ ๊ฒฝ์ฐ ๋ณด์ฌ์ง ์์ ฏ์ ๊ฐ์๊ฐ ์ ์ง๋ง 1000๊ฐ, 10000๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค๋ค๋ฉด ์ด๊ธฐ ๋ ๋๋ง ์๊ฐ์ด ์์ฒญ ๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ListView.builder
๋ค. ListView.builder
๋ ํ๋ฉด์ ๋ณด์ฌ์ง ์์ดํ
๋ง ๋ ๋๋ง์ ์งํํ๋ค. ์ต์ ํ ๋ ListView
๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ด๋ จ ์๋ฃ๋ฅผ ๋งํฌํด๋์๋ค. ์ฐธ๊ณ ํ๋ฉด ๋์์ด ๋ ๋ฏ ํ๋ค.
'๐ป ๊ฐ๋ฐ > Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Flutter] BLoC ํจํด์ผ๋ก ์๋ ๋ก๊ทธ์ธ, Splash Screen ๊ตฌํํ๊ธฐ - 1 (0) | 2022.07.26 |
---|---|
[Flutter / Dart] What is Singleton? (0) | 2022.07.21 |
4. Column, Row, Expanded (0) | 2021.08.18 |
3. Container, Padding (0) | 2021.08.18 |
2. Stateless, Stateful (0) | 2021.07.13 |