-
[FLUTTER] Container (margin & padding & alignment / boxDecoration)Flutter 2023. 3. 14. 16:43
[Container]
Container는 Box 형태의 기본적인 위젯으로 다방면으로 많이 사용
Container( width: 200, // 폭 height: 200, // 높이 color: Colors.amber, // 박스 색상 child: Text("I Love Flutter!"), // 자식 위젯 ),
- 아래와 같이 사용
body: Padding( padding: const EdgeInsets.all(16), child: Column( children: [ TextField( decoration: InputDecoration(labelText: "이메일"), ), TextField( obscureText: true, // 비밀번호 안보이도록 조정 decoration: InputDecoration(labelText: "비밀번호"), ), //Container 위젯이 ElevatedButton 위젯을 감싸게됨. Container( width: double.infinity, child: ElevatedButton( onPressed: () {}, child: Text('로그인'))) // 익명함수 ], ), ),
: 추가한 Container 위젯에 width: double.infinity,라고 추가하면, Container의 폭이 부모를 가득 채우게 되고, 버튼도 함께 최대 크기로 늘어난다.
비밀번호를 입력하는 TextField와 로그인 버튼 사이에 여백을 추가
- 기존 간격
아래 코드와 같이 Container에 margin: EdgeInsets.only(top: 24),라고 추가
Container( width: double.infinity, margin: EdgeInsets.only(top: 24), child: ElevatedButton( onPressed: () {}, child: Text('로그인')))
Container에 margin 속성은 Container 바깥 영역에 여백을 줄 때 사용한다.
- 여백 추가한 화면
- 전체코드 및 화면
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( // 화면에 보이는 영역 appBar: AppBar( title: Text( "Hello Flutter", style: TextStyle(fontSize: 28), ), centerTitle: true, ), body: Padding( padding: const EdgeInsets.all(16), child: Column( children: [ TextField( decoration: InputDecoration(labelText: "이메일"), ), TextField( obscureText: true, // 비밀번호 안보이도록 조정 decoration: InputDecoration(labelText: "비밀번호"), ), //Container 위젯이 ElevatedButton 위젯을 감싸게됨. Container( width: double.infinity, margin: EdgeInsets.only(top: 24), child: ElevatedButton( onPressed: () {}, child: Text('로그인'))) // 익명함수 ], ), ), ), ); } }
[margin (박스 바깥 영역) & padding (박스 안쪽 영역) & alignment (child 정렬)]
/// Copyright 2022. ⓒ DevStory.co.kr All rights reserved. // ignore_for_file: prefer_const_constructors import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( body: Container( width: 200, height: 200, color: Colors.pinkAccent, // 박스 색상 padding: EdgeInsets.all(20), // 박스 안쪽 영역 margin: EdgeInsets.all(50), // 박스 바깥 영역 alignment: Alignment.topLeft, // child 정렬 // center로 지정하면 가운데로 옴 child: Text( "I Love Flutter!", style: TextStyle( color: Colors.white, fontSize: 18, ), ), ), ), ); } }
: 아래와 같은 구조를 가짐
<EdgeInset 사용법>
- 전방위 모두 동일하게 적용
EdgeInsets.all(8)
- 특정 방위만 적용
EdgeInsets.only( left: 8, right: 8, )
- 위아래 또는 좌우 적용
EdgeInsets.symmetric( vertical: 8, horizontal: 8, )
[boxDecoration]
Container의 테두리(border), 그림자, 색상 등을 꾸밀 때 사용
/// Copyright 2022. ⓒ DevStory.co.kr All rights reserved. // ignore_for_file: prefer_const_constructors import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( body: Center( child: Container( width: 200, height: 200, // color : Colors.amber, // decoration와 함께 사용 불가 decoration: BoxDecoration( color: Colors.amber, // decoration 안에 color를 활용해주세요. borderRadius: BorderRadius.circular(50), // 모서리를 둥글게 border: Border.all(color: Colors.blue, width: 5), // 테두리 boxShadow: [ BoxShadow( // 그림자 효과 color: Colors.grey.withOpacity(0.7), // 투명도 70% 회색 spreadRadius: 5, // 퍼짐 효과 blurRadius: 7, // 뭉갬 효과 offset: Offset(5, 5), // 그림자를 우측 5 아래 5만큼 이동 ), ], ), ), ), ), ); } }
위에 코드를 보면 color : Colors.amber, // decoration와 함께 사용 불가라고 되어있는데, 아래와 같이 color와 decoration을 동시에 사용하면 애러가 나온다.
Container( color: Colors.amber, decoration: BoxDecoration(), ),
에러가 나지않게 하려면 아래와 같이 color를 decoration 안에 넣으면 된다.
Container( decoration: BoxDecoration( color: Colors.amber, ), ),
'Flutter' 카테고리의 다른 글
[FLUTTER] StatelessWidget & StatefulWidget (0) 2023.03.23 [FLUTTER] Image & SingleChildScrollView (0) 2023.03.14 [FLUTTER] AppBar & Padding (0) 2023.03.14 [FLUTTER] Button (0) 2023.03.14 [FLUTTER] TextField (0) 2023.03.14