๐ŸŒฑSeSac Flutter ๊ฐ•์˜_7/22 : flutter Layout, Stack Widget ๋“ฑ

KiKi ManGoยท2026๋…„ 8์›” 2์ผ

SeSac_DartFlutter

๋ชฉ๋ก ๋ณด๊ธฐ
8/18

Flutter Layout

1. Container Widget ์ดํ•ด

  • Container Widget: ํ™”๋ฉด ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์œ„์ ฏ
    • Margin : Widget์˜ ๋ฐ”๊นฅ ์—ฌ๋ฐฑ
    • Padding : Widget์˜ ์•ˆ์ชฝ ์—ฌ๋ฐฑ
  • SafeArea Widget : ์ƒํƒœ๋ฐ”, ๋…ธ์น˜(Notch), ํ™ˆ ์ธ๋””์ผ€์ดํ„ฐ๋ฅผ ํ”ผํ•ด ์•ˆ์ „ํ•œ ์˜์—ญ์— ํ™”๋ฉด์„ ๋ฐฐ์น˜
  • Fixed Size : width, height๋ฅผ ์ด์šฉํ•ด Widget์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ์ •
    • ๋ถ€๋ชจ Widget์˜ ์ œ์•ฝ(Constraints)์„ ๋ฐ›์Œ
  • EdgeInsets Constructor : ์—ฌ๋ฐฑ(Padding, Margin)์„ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค
    • EdgeInsets.all()
    • EdgeInsets.symmetric()
    • EdgeInsets.only()
    • EdgeInsets.fromLTRB()
padding: EdgeInsets.all(20),
padding: EdgeInsets.symmetric(vertical: 50,horizontal: 30),
padding: EdgeInsets.fromLTRB(30, 10, 50, 20), 
padding: EdgeInsets.only(left: 70),

2. Column, Row Widget ์ดํ•ด

  • Column Widget : ์ž์‹ Widget์„ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐฐ์น˜
  • Column mainAxisAlignment : ์„ธ๋กœ ๋ฐฉํ–ฅ ์ •๋ ฌ
    • ์ฃผ์š” ์†์„ฑ-start, center, end, spaceBetween, spaceAround, spaceEvenly
  • Column spacing : Widget ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ ์กฐ์ ˆ
    • spacing ์†์„ฑ ๋˜๋Š” SizedBox ํ™œ์šฉ
  • Column crossAxisAlignment : ๊ฐ€๋กœ ๋ฐฉํ–ฅ ์ •๋ ฌ
    • ์ฃผ์š” ์†์„ฑ-start, center, end, stretch
  • Row Widget : ์ž์‹ Widget์„ ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐฐ์น˜
  • Row mainAxisAlignment : ๊ฐ€๋กœ ๋ฐฉํ–ฅ ์ •๋ ฌ
    • ์ฃผ์š” ์†์„ฑ-start, center, end, spaceBetween, spaceAround, spaceEvenly
  • Row spacing : Widget ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ ์กฐ์ ˆ
    • spacing ์†์„ฑ ๋˜๋Š” SizedBox(width:) ํ™œ์šฉ
  • Row crossAxisAlignment : ์„ธ๋กœ ๋ฐฉํ–ฅ ์ •๋ ฌ
    • ์ฃผ์š” ์†์„ฑ-start, center, end, stretch

  • Wrap Widget : ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค์Œ ์ค„์— ๋ฐฐ์น˜
    • ํƒœ๊ทธ, ๋ฒ„ํŠผ ๋ชฉ๋ก ๋“ฑ ์—ฌ๋Ÿฌ Widget์„ ๋ฐฐ์น˜ํ•  ๋•Œ ์‚ฌ์šฉ
    • ์ฃผ์š” ์†์„ฑ -spacing, runSpacing, alignment

Scaffold(
    body: SafeArea(
        child: Center(
            child: Wrap(
                spacing: 16, // ์•„์ดํ…œ ๊ฐ„ ๊ฐ€๋กœ ๊ฐ„๊ฒฉ
                runSpacing: 32, // ์ค„ ๋ฐ”๋€œ ํ›„ ์„ธ๋กœ ๊ฐ„๊ฒฉ
                children: [
                    Container(width: 80, height: 80, color: Colors.red),
                    Container(width: 80, height: 80, color: Colors.green),
                    Container(width: 80, height: 80, color: Colors.blue),
                    Container(width: 80, height: 80, color: Colors.orange),
                    Container(width: 80, height: 80, color: Colors.purple),
                    Container(width: 80, height: 80, color: Colors.brown),
                    Container(width: 80, height: 80, color: Colors.deepOrange,),
                ],
            ),
        ),
    ),
);

3. Stack Widget ์ดํ•ด

  • Stack Widget : ์—ฌ๋Ÿฌ Widget์„ ๊ฒน์ณ์„œ ๋ฐฐ์น˜ํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ
    • ๋งˆ์ง€๋ง‰์— ๋ฐฐ์น˜ํ•œ Widget์ด ๊ฐ€์žฅ ์œ„์— ํ‘œ์‹œ

  • Positioned Widget : Stack ์˜ ์ž์‹์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž์‹ ์œ„์ ฏ์„ ๋ถ€๋ชจ Stack ๋‚ด์—์„œ ์ ˆ๋Œ€ ์œ„์น˜๋กœ ๋ฐฐ์น˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์œ„์ ฏ
    • Stack ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • Widget์˜ ์œ„์น˜๋ฅผ ์ง์ ‘ ์ง€์ •
    • ์ฃผ์š” ์†์„ฑ-top, bottom, left, right

profile
๐Ÿฅญ ํญ๋„“์€ ๊ฒฝํ—˜์„ ์”จ์•— ์‚ผ์•„, ๊นŠ์ด๋ฅผ ๋‹ค์ง€๋ฉฐ ์ง€๊ธˆ ์ต์–ด๊ฐ€๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€