책 소개
다트 기초 문법 + 플러터 기본 개념 + 클론 코딩
『핸즈온 플러터』는 구글이 개발한 크로스 플랫폼 프레임워크인 플러터의 기본 개념부터 실무 환경에서의 구현까지 단계별로 다루는 종합 가이드입니다. 플러터는 다양한 위젯을 조합하여 애플리케이션을 만들 수 있게 도와주는 강력한 도구입니다. 플러터를 활용하면 하나의 코드베이스로 iOS와 안드로이드 애플리케이션을 개발할 수 있어 시간과 비용을 절약할 수 있습니다.
이 책은 플러터의 기본 개념과 실무에서 활용할 수 있는 다양한 기술을 배울 수 있도록 도와줍니다. 특히 클론 코딩 프로젝트를 통해 플러터의 여러 기능을 익힐 수 있으며, 복잡한 애플리케이션을 효율적으로 개발하는 팁과 사용자에게 최고의 경험을 제공하는 데 필요한 모든 것을 배울 수 있습니다. 『핸즈온 플러터』로 크로스 플랫폼 개발의 효율성을 직접 느끼면서, 다양한 도구와 라이브러리를 사용하여 매력적인 애플리케이션을 만들어보세요.
밤톨마켓(당근마켓 클론 코딩 앱)을 만들면서 익히는 플러터
이 책은 플러터 기초부터 제대로 익히고 흥미를 느낄 만한 실습을 통해 플러터를 재미있게 배울 수 있도록 구성되어 있습니다. 보통 무언가를 배울 때 첫 실습으로 아주 간단한 기능을 가진 앱을 만들곤 합니다. 하지만 좀 더 실용적이고 복잡한 앱을 만들어보는 것도 많은 도움이 됩니다. 이 책에서는 당근마켓 클론 코딩 프로젝트를 진행하며 플러터를 학습합니다. 클론 코딩은 기존에 존재하는 애플리케이션이나 웹사이트를 모방하여 개발하는 것을 말합니다. 누군가는 클론 코딩으로는 개발 능력을 향상할 수 없다고 말하지만 탄탄한 기본 개념을 다진 상태에서 클론 코딩을 진행하면 실무에서 사용하는 기술과 패턴을 익힐 수 있습니다. 또한 실무에서 맞닥뜨릴 수 있는 다양한 문제를 해결하는 능력도 기를 수 있습니다. 무엇보다 프로젝트를 처음부터 끝까지 완성해면서 프로젝트 관리 능력도 키울 수 있습니다.
이 책은 2부로 나누어져 있습니다. 1부에서는 플러터를 개발하기 위해 반드시 알아야 하는 기본 개
념과 다트 언어를 학습합니다. 2부에서는 실전 클론 코딩 프로젝트를 진행하며 플러터의 다양한 기능을 학습합니다.
1부- 플러터 기초 다지기
플러터의 등장 배경과 장단점
플러터 개발 환경 설정
다트 언어의 기본 문법과 함수 및 클래스 사용법
플러터 위젯의 개념과 레이아웃 구성 방법
BLoC 패턴 및 스트림의 개념 이해
플러터에서 API를 호출하는 방법
http 패키지와 Dio 라이브러리 사용법
Firebase 프로젝트 설정 및 플러터 연동
안드로이드 및 iOS에서의 배포 방법
2부- 당근마켓 클론 코딩 프로젝트
프로젝트 설정 및 Firebase 프로젝트 연동
소개 페이지 구성 및 스플래시 페이지 구현
Firebase를 활용한 SNS 로그인 구현
앱의 기본 레이아웃 구성 및 하단 내비게이션 메뉴 구현
홈 화면 레이아웃 구성
상품 등록 페이지 구현
‘좋아요’ 기능 구현
상품 리스트를 표시하는 기능 구현
상품 상세 정보 페이지 구현
판매자와 구매자가 대화할 수 있는 채팅 기능 구현
하단 메뉴에 채팅 기능 추가
작가 소개
김성덕
개발 관련 유튜브 채널인 ‘개발하는남자’를 운영하며 8천 명이 넘는 구독자에게 유익한 콘텐츠를 제공하고 있습니다. 또한, 인프런에서 플러터 강의를 진행하고 있습니다. 교육에 대한 열정이 가득해 다양한 채널로 많은 사람에게 영감을 주는 지식 공유 활동을 하고 싶습니다. 무엇보다 이 책을 계기로 독자와 활발한 소통을 기대하고 있습니다.
목 차
1부 플러터 기초 다지기
1장 플러터 소개
1.1 플러터가 등장하게 된 배경
1.2 플러터의 장단점
1.3 플러터를 도입한 기업들
1.4 마치며
2장 개발 환경 설정하기
2.1 깃 설치
2.2 플러터 SDK 설치
2.3 IDE 설치
2.4 유용한 VSCode 확장 패키지 및 단축키 설정
3장 다트 이해하기
3.1 다트의 탄생 배경과 향후 발전 가능성
3.2 변수
3.3 변수 초기화
3.4 Late 변수
3.5 Final과 Const
3.6 내장 변수 타입
3.7 연산자
3.8 분기와 반복문
3.9 함수
3.10 객체 지향 프로그래밍
3.11 다트 3.0 이후 업데이트된 기능
4장 플러터 필수 개념 이해하기
4.1 플러터 아키텍처
4.2 위젯이란?
4.3 라이프사이클
4.4 레이아웃 구성을 위한 위젯
4.5 애니메이션
4.6 라우팅
5장 상태 관리 라이브러리
5.1 플러터의 상태란?
5.2 다양한 상태 관리 라이브러리
5.3 BLoC의 사용법
5.4 스트림 이해하기
5.5 플러터 BLoC 위젯 알아보기
5.6 GetX 사용법
5.7 상태 관리
6장 API 통신
6.1 API란?
6.2 http 패키지
6.3 API 데이터 확인
6.4 Dio 라이브러리
6.5 Dio 고급 구성
6.6 Firebase
6.7 Firestore
7장 배포
7.1 버전 관리
7.2 앱 아이콘 만들기
7.3 개인정보취급방침 만들기
7.4 안드로이드에서의 배포
7.5 iOS에서의 배포
2부 당근마켓 클론 코딩 프로젝트
8장 프로젝트 설정
8.1 프로젝트 생성
8.2 기본 프로젝트 프레임 잡기
8.3 Assets 구성
8.4 프로젝트 초기 라이브러리 설치
8.5 GetX 라우트 설정
8.6 앱 테마 설정
9장 Firebase 프로젝트 연동
9.1 프로젝트 연동
9.2 라이브러리 설정
10장 첫 페이지 진입 처리
10.1 shared_preferences 라이브러리 사용
10.2 최초 앱 화면 퍼블리싱
11장 스플래시 페이지
11.1 스플래시 페이지의 목적
11.2 SplashController 생성
11.3 데이터 로드
11.4 인증 체크
11.5 스플래시 퍼블리싱
12장 인증 프로세스
12.1 인증 흐름 설명
12.2 인증 프로세스 개발
12.3 구글 로그인
12.4 애플 로그인
12.5 AuthenticationController 개발
12.6 로그인 페이지 퍼블리싱
12.7 LoginController 개발
12.8 Firebase Authentication 활성화
12.9 회원 조회 및 라우트 처리
12.10 Firebase 데이터베이스 만들기
12.11 회원 가입 페이지 만들기
13장 앱 Root 레이아웃 구성
13.1 화면 구성
13.2 BottomNavigationBar 메뉴 상태 관리 controller 만들기
13.3 메뉴별 페이지 연결을 위한 TabBarView 구성
14장 홈 화면 구성
14.1 헤더 구성
14.2 보디 구성
14.3 레이어 버튼 구성
15장 상품 등록 페이지 개발 1
15.1 화면 구성
15.2 보디
15.3 Controller 생성 및 의존성 설정
15.4 이미지 제어 기능
15.5 글 제목 상태 관리
15.6 카테고리 선택 기능 및 상태 관리
15.7 가격 상태 관리
15.8 설명 상태 관리
15.9 거래 희망 장소 상태 관리
16장 상품 등록 페이지 개발 2
16.1 입력 필드 유효성 검사
16.2 상품 등록 데이터 저장
16.3 개선 사항
17장 홈 화면 상품 리스트
17.1 HomeController 생성 및 의존성 설정
17.2 데이터 로드
17.3 상품 리스트 상태 관리 및 화면 처리
17.4 가격 표기 위젯 생성
17.5 상품 등록 후 화면 갱신 처리
17.6 페이징 처리
18장 상품 상세 페이지
18.1 상품 페이지 라우트 연결
18.2 상세 페이지 상태 관리 설정
18.3 상품 이미지 영역
18.4 프로필 영역
18.5 판매 상품 정보 영역
18.6 거래 희망 장소 영역
18.7 판매자의 다른 상품 영역
18.8 판매 가격과 채팅 영역
18.9 상세 페이지 레이아웃
18.10 더 보기 메뉴 설정
18.11 즐겨찾기·관심 기능 개발
18.12 조회수 업데이트 기능
18.13 상품 삭제 기능
18.14 상품 정보 수정 기능
19장 채팅 페이지
19.1 라우트 설정
19.2 ChatController 관리
19.3 채팅에 연결된 상품 정보 표시
19.4 채팅 AppBar 정보 표시
19.5 채팅 TextField 영역
19.6 채팅 모델 설계
19.7 채팅 메시지 스트림 처리
19.8 판매자 입장의 채팅 페이지 구현하기
19.9 채팅 리스트 개발
19.10 채팅방 개선 사항
20장 하단 채팅 메뉴 페이지
20.1 소스코드 리팩터링
20.2 개선 사항
역자 소개
- 단순 변심인 경우 : 상품 수령 후 7일 이내 신청
- 상품 불량/오배송인 경우 : 상품 수령 후 3개월 이내, 혹은 그 사실을 알게 된 이후 30일 이내 반품 신청 가능
반품사유 | 반품 배송비 부담자 |
---|---|
단순변심 | 고객 부담이며, 최초 배송비를 포함해 왕복 배송비가 발생합니다. 또한, 도서/산간지역이거나 설치 상품을 반품하는 경우에는 배송비가 추가될 수 있습니다. |
고객 부담이 아닙니다. |
진행 상태 | 결제완료 | 상품준비중 | 배송지시/배송중/배송완료 |
---|---|---|---|
어떤 상태 | 주문 내역 확인 전 | 상품 발송 준비 중 | 상품이 택배사로 이미 발송 됨 |
환불 | 즉시환불 | 구매취소 의사전달 → 발송중지 → 환불 | 반품회수 → 반품상품 확인 → 환불 |
- 결제완료 또는 배송상품은 1:1 문의에 취소신청해 주셔야 합니다.
- 특정 상품의 경우 취소 수수료가 부과될 수 있습니다.
결제수단 | 환불시점 | 환불방법 |
---|---|---|
신용카드 | 취소완료 후, 3~5일 내 카드사 승인취소(영업일 기준) | 신용카드 승인취소 |
계좌이체 |
실시간 계좌이체 또는 무통장입금 취소완료 후, 입력하신 환불계좌로 1~2일 내 환불금액 입금(영업일 기준) |
계좌입금 |
휴대폰 결제 |
당일 구매내역 취소시 취소 완료 후, 6시간 이내 승인취소 전월 구매내역 취소시 취소 완료 후, 1~2일 내 환불계좌로 입금(영업일 기준) |
당일취소 : 휴대폰 결제 승인취소 익월취소 : 계좌입금 |
포인트 | 취소 완료 후, 당일 포인트 적립 | 환불 포인트 적립 |
- 단순변심으로 인한 반품 시, 배송 완료 후 7일이 지나면 취소/반품 신청이 접수되지 않습니다.
- 주문/제작 상품의 경우, 상품의 제작이 이미 진행된 경우에는 취소가 불가합니다.
- 구성품을 분실하였거나 취급 부주의로 인한 파손/고장/오염된 경우에는 취소/반품이 제한됩니다.
- 제조사의 사정 (신모델 출시 등) 및 부품 가격변동 등에 의해 가격이 변동될 수 있으며, 이로 인한 반품 및 가격보상은 불가합니다.
- 뷰티 상품 이용 시 트러블(알러지, 붉은 반점, 가려움, 따가움)이 발생하는 경우 진료 확인서 및 소견서 등을 증빙하면 환불이 가능하지만 이 경우, 제반 비용은 고객님께서 부담하셔야 합니다.
- 각 상품별로 아래와 같은 사유로 취소/반품이 제한 될 수 있습니다.
상품군 | 취소/반품 불가사유 |
---|---|
의류/잡화/수입명품 | 상품의 택(TAG) 제거/라벨 및 상품 훼손으로 상품의 가치가 현저히 감소된 경우 |
계절상품/식품/화장품 | 고객님의 사용, 시간경과, 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 |
가전/설치상품 | 전자제품 특성 상, 정품 스티커가 제거되었거나 설치 또는 사용 이후에 단순변심인 경우, 액정화면이 부착된 상품의 전원을 켠 경우 (상품불량으로 인한 교환/반품은 AS센터의 불량 판정을 받아야 합니다.) |
자동차용품 | 상품을 개봉하여 장착한 이후 단순변심의 경우 |
CD/DVD/GAME/BOOK등 | 복제가 가능한 상품의 포장 등을 훼손한 경우 |
상품의 시리얼 넘버 유출로 내장된 소프트웨어의 가치가 감소한 경우 | |
노트북, 테스크탑 PC 등 | 홀로그램 등을 분리, 분실, 훼손하여 상품의 가치가 현저히 감소하여 재판매가 불가할 경우 |