๊ธฐ๋ณธ ์์ ฏ
โข
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
๋ณต์ฌ