Search

๊ธฐ๋ณธ ์œ„์ ฏ

๊ธฐ๋ณธ ์œ„์ ฏ

โ€ข
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 ์ฐพ๊ธฐ

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
๋ณต์‚ฌ