Search
Duplicate
moon
sun

기본 위젯

기본 위젯

•
Text
•
Image
•
Icon
•
SafeArea

Text

💡
화면에 문자열을 출력하는 위젯

문법

•
Text( 텍스트, 스타일 )
👩🏼‍💻
Text( “텍스트”, style: TextStyle( 텍스트 스타일 속성… ) )
Text( '표시할 텍스트', style: TextStyle( // 텍스트 스타일 설정 (옵션) fontSize: 16.0, fontWeight: FontWeight.bold, color: Colors.blue, ), )
Dart
복사
•
'표시할 텍스트': 화면에 표시할 텍스트를 지정합니다.
•
style: 텍스트의 스타일을 설정하는 옵션 속성입니다. TextStyle 클래스를 사용하여 폰트 크기, 두께, 색상 등을 지정할 수 있습니다.

다양한 텍스트 스타일

Text.rich( )

👩🏼‍💻
Text.rich( ) 를 사용하면, HTML의 <span> 태그 처럼, 여러 텍스트를 나누어 스타일을 줄 수 있습니다.
Text.rich( TextSpan( text: '일반 텍스트 ', style: TextStyle(fontSize: 16.0, color: Colors.black), children: <TextSpan>[ TextSpan( text: '서식이 다른 텍스트', style: TextStyle(fontWeight: FontWeight.bold, color: Colors.blue), ), TextSpan( text: ' 또 다른 일반 텍스트', style: TextStyle(fontSize: 16.0, color: Colors.black), ), ], ), )
Dart
복사

Image

📷
이미지를 출력하는 위젯 - 각각 서버에 있는 이미지, 앱 안에 있는 로컬 이미지를 출력하는 위젯이 있습니다.

Image.network()

📷
네트워크에서 이미지를 가져와 표시하는 Flutter 위젯
Image.network( '이미지의 URL', width: 100.0, // 이미지의 가로 크기 (옵션) height: 100.0, // 이미지의 세로 크기 (옵션) fit: BoxFit.cover, // 이미지가 어떻게 화면에 맞출지 설정 (옵션) )
Dart
복사
•
'이미지의 URL': 표시할 이미지의 URL을 지정합니다.
•
width, height: 이미지의 가로 및 세로 크기를 설정합니다. (옵션)
•
fit: 이미지가 화면에 맞게 조정되는 방식을 설정합니다. BoxFit 열거형을 사용하여 지정합니다. (옵션)

AssetImage

📷
앱 안에 있는 로컬 이미지를 출력하는 위젯
Image( image: AssetImage('assets/image.png'), width: 100.0, // 이미지의 가로 크기 (옵션) height: 100.0, // 이미지의 세로 크기 (옵션) fit: BoxFit.cover, // 이미지가 어떻게 화면에 맞출지 설정 (옵션) )
Dart
복사
•
image: 표시할 이미지를 지정합니다. AssetImage는 앱의 자산 폴더에 있는 이미지를 로드할 때 사용됩니다.
•
width, height: 이미지의 가로 및 세로 크기를 설정합니다. (옵션)
•
fit: 이미지가 화면에 맞게 조정되는 방식을 설정합니다. BoxFit 열거형을 사용하여 지정합니다. (옵션)

pubspec.yaml 에서 image 폴더 설정

⚠️
앱 내의 로컬 이미지를 사용하려면, pubspect.yaml 에서 이미지 경로를 설정해야합니다.
•
이미지 경로 : my_flutter_app/images
my_flutter_app/ |- images/ |- image1.png |- image2.png |- lib/ |- pubspec.yaml ...
Plain Text
복사
•
pubspec.yaml
flutter: assets: - images/
YAML
복사
여기서 images/는 프로젝트 루트 디렉토리에 있는 images 폴더를 나타냅니다. 이제 해당 이미지 폴더에 있는 이미지 파일들은 Flutter 앱에서 접근 가능하게 됩니다.
✅ flutter pub get 명령을 사용하여 패키지 의존성을 업데이트해야 합니다.
설정 후에는 앱 코드에서 Image.asset를 사용하여 이미지를 로드할 수 있습니다.
Image.asset('images/image1.png'),
Dart
복사

BoxFit

💡
Image 위젯에서 이미지의 화면에 맞추는 방법을 지정하는 속성값(열거형)
BoxFit은 이미지를 어떻게 조절하고 화면에 맞출지를 결정하는 데 사용되는 속성값입니다.
•
종류
◦
contain
◦
cover
◦
fill
◦
fitWidth
◦
fitHeight
◦
scaleDown
◦
none
BoxFit 값
설명
contain
이미지가 화면에 딱 맞도록 크기를 조절하며, 화면에 모두 나타남
cover
이미지가 화면을 덮도록 크기를 조절하며, 일부가 화면 밖으로 나갈 수 있음
fill
이미지가 화면을 가득 채우도록 크기를 조절하며, 일부가 화면 밖으로 나갈 수 있음
fitWidth
이미지가 화면 너비에 맞도록 크기를 조절하며, 세로 부분이 잘릴 수 있음
fitHeight
이미지가 화면 높이에 맞도록 크기를 조절하며, 가로 부분이 잘릴 수 있음
scaleDown
이미지가 원본 크기보다 작을 경우에만 크기를 조절하거나 이미지를 그대로 표시
none
이미지를 크기를 조절하지 않고 그대로 표시

contain

📦
이미지가 화면에 딱 맞도록 크기를 조절하며, 화면에 모두 나타납니다.
Image.network( 'https://example.com/image.jpg', fit: BoxFit.contain, )
Dart
복사

cover

📦
이미지가 화면을 덮도록 크기를 조절하며, 이미지의 일부가 화면 밖으로 나갈 수 있습니다.
Image.network( 'https://example.com/image.jpg', fit: BoxFit.cover, )
Dart
복사

fill

📦
이미지가 화면을 가득 채우도록 크기를 조절하며, 이미지의 일부가 화면 밖으로 나갈 수 있습니다.
Image.network( 'https://example.com/image.jpg', fit: BoxFit.fill, )
Dart
복사

fitWidth

📦
이미지가 화면 너비에 맞도록 크기를 조절하며, 세로 부분이 잘릴 수 있습니다.
Image.network( 'https://example.com/image.jpg', fit: BoxFit.fitWidth, )
Dart
복사

fitHeight

📦
이미지가 화면 높이에 맞도록 크기를 조절하며, 가로 부분이 잘릴 수 있습니다.
Image.network( 'https://example.com/image.jpg', fit: BoxFit.fitHeight, )
Dart
복사

scaleDown

📦
이미지가 원본 크기보다 작을 경우에만 크기를 조절합니다. 그렇지 않으면 이미지를 그대로 표시합니다.
Image.network( 'https://example.com/image.jpg', fit: BoxFit.scaleDown, )
Dart
복사

none

📦
이미지를 크기를 조절하지 않고 그대로 표시합니다.
Image.network( 'https://example.com/image.jpg', fit: BoxFit.none, )
Dart
복사

Icon

😀
아이콘을 표시하는 위젯
Icon( Icons.star, // 사용할 아이콘 (Material Design Icons) size: 24.0, // 아이콘의 크기 (옵션) color: Colors.yellow, // 아이콘의 색상 (옵션) )
Dart
복사
•
Icons.star: 사용할 아이콘을 지정합니다. Icons 클래스는 Material Design Icons를 포함하고 있습니다.
•
size: 아이콘의 크기를 설정합니다. (옵션)
•
color: 아이콘의 색상을 설정합니다. (옵션)

Material Design Icon 찾기

icon_wiget.dart

import 'package:flutter/material.dart'; class IconWidget extends StatelessWidget { const IconWidget({super.key}); Widget build(BuildContext context) { return SingleChildScrollView( child: Center( child: Column( children: [ SizedBox(height: 50,), Text("아이콘 위젯", style: TextStyle(fontSize: 30),), Divider(), Text("기본 아이콘", style: TextStyle(fontSize: 30),), Icon( Icons.face, size: 48, color: Colors.black, ), // 추가 아이콘 SizedBox(height: 10,), Icon( Icons.person, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.login, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.logout, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.shopping_cart, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.shopping_bag, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.menu, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( // Icons.favorite, Icons.favorite_border, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( // Icons.thumb_up, Icons.thumb_up_outlined, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( // Icons.bookmark, Icons.bookmark_outline, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.payment, size: 48, color: Colors.black, ), SizedBox(height: 10,), Divider(), // CRUD Text("CRUD", style: TextStyle(fontSize: 20),), SizedBox(height: 10,), Icon( Icons.create, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.edit, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.read_more, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( // Icons.delete, Icons.delete_forever, size: 48, color: Colors.black, ), SizedBox(height: 10,), Divider(), // FORM Text("FORM", style: TextStyle(fontSize: 20),), SizedBox(height: 10,), Icon( Icons.person, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.lock, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.calendar_month, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.schedule, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.place, size: 48, color: Colors.black, ), SizedBox(height: 10,), Icon( Icons.favorite, size: 48, color: Colors.red, ), ], ), ), ); } }
Dart
복사

SafeArea

💡
안전한 공간을 확보해주는 위젯
구현한 UI 가 디바이스의 상태바, 카메라 영역, 노치 영역 등을 침범하지 않게 하기 위해서, 안전 영역을 확보해주는 위젯입니다.
SafeArea( child: // 안전한 영역에 배치할 위젯을 설정 )
Dart
복사
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('SafeArea Example'), ), body: SafeArea( top: true, // 상단 안전한 영역 사용 bottom: true, // 하단 안전한 영역 사용 left: true, // 왼쪽 안전한 영역 사용 right: true, // 오른쪽 안전한 영역 사용 minimum: EdgeInsets.all(16.0), // 네 방향의 최소 안전 여백 maintainBottomViewPadding: true, // 하단 여백 유지 child: Center( child: Text( 'Hello, SafeArea!', style: TextStyle(fontSize: 24.0), ), ), ), ), ); } }
Dart
복사