Notice
Recent Posts
Recent Comments
Link
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[flutter] 20๊ฐ• | ์ปจํ…Œ์ด๋„ˆ ์œ„์ ฏ (container widget) ๋˜์งš์–ด ๋ณด๊ธฐ. ๋ณธ๋ฌธ

flutter/์ˆœํ•œ๋ง›(๊ธฐ์ดˆ)

[flutter] 20๊ฐ• | ์ปจํ…Œ์ด๋„ˆ ์œ„์ ฏ (container widget) ๋˜์งš์–ด ๋ณด๊ธฐ.

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2021. 8. 13. 16:34

โœ… ๋“œ๋””์–ด ์—ฌ๊ธฐ๋ถ€ํ„ฐ๋Š” ์ˆœํ•œ๋ง›์„ ๋ฒ—์–ด๋‚˜ ์กฐ๊ธˆ ๋งค์šด๋ง› ๊ฐ•์ขŒ์ด๋‹ค ใ…Ž..ใ…Ž

๋ฌด๋ฃŒ ๊ฐ•์ขŒ์ธ๋ฐ ์ง„์งœ ์ด๋ ‡๊ฒŒ ์ข‹์„ ์ˆ˜๊ฐ€ ์—†์Œ...

 

์œ ํŠœ๋ธŒ ์ฝ”๋”ฉ์‰ํ”„๋‹˜ ๊ฐ•์ขŒ๋ฅผ ๋ฌดํ•œํžˆ ์ถ”์ฒœํ•œ๋‹ค.

 

โœ… ์ด๋ฒˆ์‹œ๊ฐ„๋ถ€ํ„ฐ๋Š” ์ปจํ…Œ์ด๋„ˆ ์œ„์ ฏ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ์˜ˆ์ •์ธ๋ฐ, ์ฐจ๊ทผ์ฐจ๊ทผ ๋ด๋ณด์ž.

์šฐ์„  ํ”Œ๋Ÿฌํ„ฐ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ๊ฐ€์„œ ๋ ˆ์ด์•„์›ƒ ์œ„์ ฏ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๊ฒ ์ง€?

https://flutter-ko.dev/docs/development/ui/widgets/layout#Single-child%20layout%20widgets

 

Layout widgets

 

flutter-ko.dev

 

ํ”Œ๋Ÿฌํ„ฐ์˜ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด

 

"Containers with no children try to be as big as possible"

childern์ด ์—†์„๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํฐ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•œ๋‹ค.

 

๐ŸŸ  ์ฝ”๋“œ๋ฅผ ๋ณด์•„๋ผ.

๋ฐฑ๊ทธ๋ผ์šด๋“œ๊ฐ€ white๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด๋„ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ™”๋ฉด์„ ์ตœ๋Œ€๋กœ ์ฐจ์ง€ํ•ด์„œ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๋ชจ๋‘ ๋ฎ์—ฌ์žˆ๋‹ค.

import 'package:flutter/material.dart'; // ๋ฐ์Šคํฌํƒ‘, ์•ฑ ๋“ฑ์— ๊ณ ๋ฃจ UI๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ๊ธ€์ด ์ œ๊ณตํ•ด์ฃผ๋Š” ํŒจํ‚ค
import 'package:fluttertoast/fluttertoast.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      // ์‹ค์งˆ์ ์œผ๋กœ ๋ชจ๋“  ์•ฑ์„ ๊ฐ์‹ธ๊ณ  ์žˆ๋‹ค.
      title: 'Appbar', // ์•ฑ์„ ์ด์นญํ•˜๋Š” ์ด๋ฆ„ -> ์Šค๋งˆํŠธ ํฐ ์•ฑ์—์„œ ์ตœ๊ทผ ์‚ฌ์šฉํ•œ ์•ฑ ๋ณด์—ฌ์ค„ ๋•Œ์˜ ์ด๋ฆ„
      theme:
          ThemeData(primarySwatch: Colors.green // ํŠน์ •์ƒ‰์˜ ์‘์šฉ๋“ค์„ ๊ธฐ๋ณธ ์ƒ‰์ƒ์œผ๋กœ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒ 
              ),
      home: MyPage(), // home์€ ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ๊ฐ€์žฅ๋จผ์ € ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด
    );
  }
}

class MyPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Container(
        color: Colors.red
      ),
    );
  }
}

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•œ๋‹ค.

 

 

โœ… ๊ทธ๋ ‡๋‹ค๋ฉด child๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

class MyPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      body: Container(
        color: Colors.red,
        child: Text('Hello Hello Hello Hello Hello'),
      ),
    );
  }
}

๋ฐ”๋€ ์ฝ”๋“œ๋Š” ํ•œ์ค„ ๋ฐ–์— ์—†๋‹ค. ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ์—„์ฒญ๋‚œ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค... 

๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด

"Containers with children size themselves to their childred"

์ปจํ…Œ์ด๋„ˆ๊ฐ€ children์„ ๊ฐ€์ง€๋ฉด children์˜ ํฌ๊ธฐ๊ฐ€ ๋œ๋‹ค.

 

๋‹ค๋งŒ ์•„๋ž˜ ๊ทธ๋ฆผ์˜ ๋‹จ์ ์€ ํ™”๋ฉด ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. ๊ทธ๋Ÿผ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

child๋ฅผ ๊ฐ€์ง„ ์ปจํ…Œ์ด๋„ˆ

 

๋ฐ”๋กœ SafeArea !

iOS ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ๋ณด์•˜๋˜ ๋‚ด์šฉ์ธ๋ฐ, iOS์—์„œ ์• ํ”Œ์˜ ์„ค๋ช…์— ๋”ฐ๋ฅด๋ฉด SafeArea๋Š” ๋…ธ์น˜๊ฐ€ ์ƒ๊น€์œผ๋กœ์จ ๊ฐ€๋ ค์ง€๋Š” ํ™”๋ฉด์ด ์ƒ๊ธฐ๋Š”๋ฐ ์ด ์˜์—ญ์„ ์ œ์™ธํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ๋ทฐ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. 

class MyPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      body: SafeArea(
        child: Container(
          color: Colors.red,
          child: Text('Hello Hello Hello Hello Hello'),
        ),
      ),
    );
  }
}

๋งฅ ๊ธฐ์ค€์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— option + enter ๋ˆ„๋ฅด๋ฉด ๋ฐ”๋กœ child ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ•ด์ค€๋‹ค.

SafeArea ์„ค์ •!

 

โœ… ์ด๋ฒˆ์—๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ์™€ margin์„ ์„ค์ •ํ•ด๋ณด์ž.

class MyPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      body: SafeArea(
        child: Container(
          color: Colors.red,
          width: 100,
          height: 100,
          margin: EdgeInsets.symmetric( //๊ฐ€๋กœ ์„ธ๋กœ ๊ฐ’ ์„ค์ •
            vertical: 50, // ์„ธ๋กœ์ถ•
            horizontal: 10, // ๊ฐ€๋กœ์ถ•
          ), 
          padding: EdgeInsets.all(20), 
          //EdgeInsets.all(20), // ๋ชจ๋“  ์™ธ๋ถ€๋ฉด์— 20 ํ”ฝ์…€ ์—ฌ๋ฐฑ

          child: Text('Hello Hello Hello Hello Hello'),
        ),
      ),
    );
  }
}

 margin : (์™ผ์ชฝ EdgeInsets.all,  ๊ฐ€์šด๋ฐ EdgeInsets.symmetric), padding( ์˜ค๋ฅธ์ชฝ ) 

โœ… Container ์œ„์ ฏ์€ Only One child

ํ”Œ๋Ÿฌํ„ฐ์—๋Š” ๋ฉ€ํ‹ฐ์ฐจ์ผ๋“œ์™€ ์›์ฐจ์ผ๋“œ ๋‘๊ฐœ๊ฐ€ ์žˆ๋Š”๋ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ์› ์ฐจ์ผ๋“œ์ด๋‹ค.

 

 

 

Comments