Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- late 키워드
- null safety
- my_sql
- null 억제 연산자
- 콜백 함수
- SQL
- 1일 1쿼리
- array
- LinkedList
- 다중상속
- FLUTTER
- flutter 믹스인
- null check 연산자
- 추상클래스
- 2일차
- jmeter
- 오늘은 1일 2쿼리
- 비동기 처리
- null 병합 연산자
- rdbms nosql 차이
- ?. ?? ! late
- mysql mongo 성능 비교
- MySQL
- 주말에도 1일 1쿼리
- 배열과 리스트
- 주말도 한다
- 컴포지션과 집합
- 주말도 식지않아
- 앱개발 가보자고
- dart
Archives
- Today
- Total
subindev 님의 블로그
실습#1 - 스토어 앱 만들기 본문
- github 주소
https://github.com/subin3578/flutter/tree/main/flutter_store_app
flutter/flutter_store_app at main · subin3578/flutter
Contribute to subin3578/flutter development by creating an account on GitHub.
github.com
오늘은 스토어 앱을 만들어보는 실습을 통해 MaterialApp, Scaffold, Column, Row, Text, SafeArea, Image, Spacer, Expanded, Padding, SizedBox 위젯에 대하여 알아보는 시간을 가지겠습니다.
스토어 앱 만들기
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
// 결국 최상위 위젯은 Widget이다 즉, Widget으로 업캐스팅이 가능하단 말
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// MatiralApp - 앱의 전체적인 구조와 디자인, 앱의 루트 위젯이다
// Android 앱 개발 시 사용 (<-> CupertinoApp - IOS 앱 개발 시 사용)
// title. theme, home등 다양한 매개변수 존재함
return MaterialApp(
debugShowCheckedModeBanner: false,
home: StorePage(),
);
}
}
class StorePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
// AppBar, BottomNavigatorBar, body 등을 포함한 기본적인 레이아웃
body: SafeArea(
// 기기별로 다른 상태바 영역에 패딩을 자동으로 넣어줘서 비율에 맞게 보이도록 조정
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(25.0), // 해당하는 EdgeInsets 클래스 불러서 사용
child: Row(
children: [
Text(
'Woman',
style: TextStyle(fontWeight: FontWeight.bold),
// 틈새 퀴즈 ? FontWeight 클래스에서 직접 참조가 가능하다는 것을 보아 bold 는 어떻게 선언되어 있나 ?
// FontWeight.bold - 직접 참조가 가능하다는 것은 static 으로 선언된 변수라는 것
// 즉, 클래스 인스턴스를 만들지 않고도 바로 접근할 수 있는 값
),
Spacer(),
Text(
'Kids',
style: TextStyle(fontWeight: FontWeight.bold),
),
Spacer(), // 남은 공간을 차지하여 간격을 조절할 때 사용
Text(
'Shoes',
style: TextStyle(fontWeight: FontWeight.bold),
),
Spacer(),
Text(
'Bags',
style: TextStyle(fontWeight: FontWeight.bold),
),
],
),
),
// 자식 2
Expanded(
// Column 방향으로 | 자식 위젯을 가용 공간에 맞게 확장시켜 배치하는 유닛
child: Image.asset(
'assets/bag.jpeg',
fit: BoxFit.cover,
),
),
SizedBox(
// 빈 공간을 만들거나 자식 위젯의 크기를 조절할 때 사용
height: 20,
),
Expanded(
child: Image.asset(
'assets/cloth.jpeg',
fit: BoxFit.cover,
// BoxFit. (cover / fill / contaion)
// cover - 원본 비율 유지, 지정 영역 맞춤 - 장점 : 비율 유지 / 단점 : 지정 크기를 벗어난 이미지는 잘림
// fill - 원본 무시 , 지정 영역 맞춤
// container - 원본 비율
),
),
],
),
));
}
}
이론 정리
더보기
- MaterialApp: Flutter 앱의 루트 위젯으로, Android 디자인을 적용하여 앱의 기본 구조를 설정합니다.
- CupertinoApp: Flutter 앱의 루트 위젯으로, IOS 디자인을 적용하여 앱의 기본 구조를 설정합니다.
- Scaffold: 앱의 기본 레이아웃 구조를 제공하는 위젯으로, 앱 바, 본문, 바텀 레이아웃 바등을 설정할 수 있습니다.
- Column: 수직 방향으로 자식 위젯들을 배치하는 레이아웃 위젯입니다.
- Row: 수평 방향으로 자식 위젯들을 배치하는 레이아웃 위젯입니다.
- Text: 텍스트를 화면에 표시하는 위젯으로, 다양한 스타일을 적용할 수 있습니다.
- SafeArea: 화면의 안전 영역(예: 노치, 홈 인디케이터)을 피해서 자식 위젯을 배치하는 위젯입니다.
- Image: 이미지 파일을 화면에 표시하는 위젯입니다. 로컬 이미지나 네트워크 이미지를 지원합니다.
- Spacer: 남은 공간을 자동으로 차지하는 위젯으로, 주로 Row나 Column 내에서 자식 위젯 간 간격을 조정하는 데 사용됩니다.
- Expanded: 남은 공간을 자식 위젯이 확장할 수 있도록 만드는 위젯으로, Row, Column 내에서 유용합니다.
- Padding: 자식 위젯을 감싸서 주어진 여백(padding)을 적용하는 위젯입니다.
- SizedBox: 고정된 크기의 빈 공간을 만들거나 자식 위젯의 크기를 설정하는 위젯입니다.
'앱개발 > Flutter 실습' 카테고리의 다른 글
실습 #3 프로필 앱 만들기 (0) | 2025.01.13 |
---|---|
실습 #2 - 레시피 앱 만들기 (0) | 2025.01.13 |