책 소개
소스 파일은 아래 깃허브 페이지에서 내려 받으실 수 있습니다.
(https://github.com/AcornPublishing/beginning-flutter)
요약
플러터를 사용해서 크로스 플랫폼 모바일 앱을 개발할 때 필요한 기본 지식과 예제를 소개한다. 1부 플러터 소개에서는 플러터 소개 및 플러터 앱 개발에 필요한 개발 환경을 설정한다. 2부 플러터 기초에서는 플러터 앱의 기본 구성 요소인 위젯을 자세히 알아보고 위젯의 레이아웃, 위젯을 꾸미는 방법과 함께 플러터 앱 개발에 꼭 필요한 제스처 처리, 내비게이션 등의 개념도 배운다. 3부 플러터 활용에서는 지금까지 배운 지식을 바탕으로 파일, HTTP, 구글 파이어베이스를 사용하는 플러터 앱을 만들어본다. 플러터의 기본 언어인 다트의 특징은 부록에서 소개하고 마무리한다.
이 책에 쏟아진 찬사
“랩 페인의 책은 플러터로 멀티플랫폼 앱 개발을 시작하려는 개발자에게 필요한 정보가 가득한 멋진 안내서다.”
- 프레드릭 슈비게르(Frederik Schwieger)/ 국제 플러터 해커톤 주최자, 플러터 스쿨 설립자
“멋진 책이다! 이 책은 초보자가 원하는 내용은 물론 그 이상을 담고 있다. 플러터 자체를 설명할 뿐 아니라 플러터가 존재하는 이유까지도 설명한다. 또 개발 중에 흔히 일어나는 문제를 해결하는 멋진 팁도 제공한다. 강력히 추천한다.”
- 제로엔 “제이” 마이어(Jeroen “Jay” Meijer)/ 플러터 커뮤니티 깃허브 관리자
“랩의 책은 플러터를 시작하기에 아주 좋은 책이다. 앱을 처음 만드는 개발자에게 필요한 주제를 빼놓지 않고 다룰 뿐만 아니라 노련한 개발자에게도 값진 정보가 들어있다.”
- 노르베르트 코시어(Norbert Kozsir)/ 플러터 커뮤니티 편집자
“아름다운 앱을 만들 수 있는 재밌고 효율적인 방법을 찾는다면 플러터를 살펴보라. 플러터의 세계로 떠나는 여행 안내서를 찾고 있다면 이 책을 권한다.”
- 브라이언 이건(Brian Egan), flutter architecture samples, scoped model, flutter redux 개발자
“플러터를 시작하는 모든 개발자가 따라 하기 쉽도록 복잡한 정보를 단순하게 잘 나눠 설명한다. 노련한 개발자든 막 입문한 개발자든 플러터를 시작할 때 필요한 모든 것을 제공한다.“
- 내시 램디얼(Nash Ramdial), 미디엄의 플러터 커뮤니티 수석 편집자
“영어가 모국어가 아닌 독자로서 이 책의 간결한 설명과 지루할 틈 없이 이해할 수 있는 점에 감탄했다.”
- 라우프 라히쉬(Raouf Rahiche)/ 플러터 강연자, 개발자, 강사
“랩 페인은 얼리어답터이자 플러터 커뮤니티의 원년 멤버로서 플러터에 관한 세계 최고의 권위자 중 한 명이다. 랩은 엔지니어를 대상으로 문서를 작성하는 엔지니어로 고맙게도 다른 사람이 쉽게 이해할 수 있는 즐거운 문체로 책을 쓰는 사람이다.”
- 스캇 스톨(Scott Stoll)/ 플러터 코드베이스 기여자, 플러터 스터디 그룹의 공동 설립자
이 책의 대상 독자
자바, C#, C++, 오브젝티브C같은 객체지향 언어를 경험해봤고, 플러터로 안드로이드 앱, iOS 앱, 웹 앱을 만들고 싶은 개발자를 대상으로 한다. 플러터가 처음이고 여러 플랫폼에서 실행할 앱을 만들고 싶다면 이 책은 최고의 선택이다.
플러터 경험이 있는 개발자에게도 물론 도움되겠지만, 플러터에 관한 사전 지식이나 경험이 없어도 충분히 읽을 수 있다. 이 책은 독자가 플러터를 완전히 처음 접한다는 생각으로 썼다.
iOS, 안드로이드, 웹 개발에 관해 알고 있다면 책의 내용을 이해하기 더 쉬울 수 있다. 플러터와 비슷한 점이 많기 때문이다. 특히 자바스크립트와 리액트를 잘 안다면 더 좋다. 모른다 해도 조바심을 느낄 필요는 없다. 몰라도 상관없다.
다트 언어에 관한 지식도 도움이 된다. 다트는 분명 독특한 면이 있지만 객체 지향의 개념을 이해한다면 매우 쉽게 받아들일 수 있다. 자바나 C#을 안다면 별 다른 설명 없이도 책의 코드를 대부분 이해할 수 있다. 조금만 읽어봐도 바로 코드를 작성할 수 있을 정도다.
동시에 다트에는 모범 사례로 여길 만한 독특하면서도 멋진 기능이 몇 가지 있다. 이런 모범 사례를 사용하지 않고 자바 개발자가 이해하기 쉽게 코드를 간소화할 수도 있었지만, 장기적으로 볼 때 별 도움이 안 된다고 생각했다. 따라서 모범 사례를 적극적으로 활용했고 설명은 부록 A, ‘다트 언어 개요’에 수록했다. 부록을 통해 코드를 작성할 때 참고할 수 있을 정도의 커닝페이퍼와 함께 다른 언어의 개발자가 예상치 못한 특징에 관한 깊이 있는 설명을 제공한다. ‘다트의 예상치 못한 특징’ 절을 특히 주의 깊게 보기 바란다.
이 책의 구성
이 책은 iOS, 안드로이드, 웹에서 제대로 동작하는 기능이 풍부한 앱을 만드는 방법을 크게 세 부분으로 나눠서 알려준다.
1부: 플러터 소개
1장. ‘헬로 플러터’에서는 이 책을 시작하는 데 필요한 기본 내용을 다루며, 이 책을 선택한 이유를 확인할 수 있다. 플러터로 풀 수 있는 문제점과 개발 책임자가 플러터와 다른 솔루션을 놓고 고민하는 이유를 알려준다.
플러터는 독특하고 다양한 툴을 지니고 있다. 하지만 각 툴의 역할과 사용법이 항상 간단하지만은 않다. 2장. ‘플러터 개발’에서는 코드 작성, 디버깅, 테스트, 실행에 이르는 과정을 안내한다. 설치와 업데이트를 포함해서 개발 툴을 준비하는 방법도 배운다.
2부: 플러터의 기초
위젯은 모든 플러터 앱의 핵심 구성 요소다. 3장. ‘위젯이 전부다’에서는 위젯이 중요한 이유를 보여주고, 위젯을 만들 의욕을 불러 일으키며, 위젯을 만드는 기본적인 방법을 소개한다. UI도 코드로 만드는 플러터의 특징, 위젯의 종류, 키, 상태가 없는 위젯과 상태를 지니는 위젯의 비교 등을 주제로 한다.
4장. ‘값 위젯’에서는 값을 유지하는 위젯, 특히 사용자 입력 필드를 깊이 파고든다. pubspec.yaml 파일과 Text, Image, Icon 위젯, 플러터에서 폼을 만드는 방법을 다룬다.
5장. ‘제스처 대응’에서는 탭, 스와이프, 핀치 같은 사용자의 동작에 대응하는 방법을 보여준다. 다양한 버튼과 GestureDetector 위젯을 소개한다.
6장. ‘위젯 레이아웃’에서는 화면에 위젯을 배치하는 방법, 위젯을 양옆이나 위아래로 나란히 배치하는 방법, 위젯 사이의 간격을 정의하는 방법, 위젯을 가로, 세로로 정렬하는 방법을 배운다.
내비게이션은 사용자의 행동에 대응해서 위젯을 감추고 다른 위젯을 보여준다. 이렇게 해서 다른 화면으로 넘어가는 느낌을 준다. 7장. ‘내비게이션과 라우팅’에서는 스택 내비게이션, 탭 내비게이션, 드로어 내비게이션을 설명한다.
8장. ‘위젯 꾸미기’에서는 색상, 테두리, 장식, 형태 등 위젯의 표현과 관련 있는 속성을 제어하는 방법을 살펴본다. 이미 앞장에서 여러 위젯을 소개하면서 가벼운 꾸미기를 적용해봤다. 하지만 이 장에서는 실제 앱을 보기 좋게 꾸미고 전체적인 일관성을 유지하는 데 필요한 모든 질문에 대한 답변을 볼 수 있다.
9장. ‘상태 관리’에서는 다른 위젯의 데이터를 가져오는 방법과 가져온 데이터를 변경하는 방법을 알려준다. StatefulWidgets를 만드는 방법과 가장 좋은 설계 방법을 설명한다. 또 실제로 복잡한 상태 관리를 처리하는 다양한 툴을 개략적으로 살펴본다.
3부: 플러터 활용
10장. ‘파일을 사용하는 플러터 앱 개발’에서는 라이브러리 사용법과 Future, async, await, 앱에 파일을 추가하는 방법, 파일을 읽고 쓰는 방법, JSON 직렬화를 설명한다.
11장. ‘HTTP로 RESTful API 호출’에서는 HTTP API 서버를 통해 데이터를 읽고 쓸 때 필요한 GET, POST, PUT, DELETE, PATCH 요청을 만드는 방법을 설명한다.
12장. ‘플러터에서 파이어베이스 활용’에서는 구글이 제공하는 강력한 클라우드 솔루션인 파이어베이스와 플러터를 실제로 함께 사용하는 방법을 보여준다.
목차
목차
- 1부. 플러터 소개
- 1장. 헬로 플러터
- 플러터란?
- 플러터를 선택해야 하는 이유
- 다른 선택지
- 네이티브 솔루션
- 마무리
- 2장. 플러터 개발
- 플러터 툴체인
- 플러터 SDK
- IDE
- IDE DevTools
- 에뮬레이터
- 개발 툴 업데이트
- 플러터 개발 과정
- 자동으로 만들어지는 앱과 파일
- 앱 실행
- 마무리
- 플러터 툴체인
- 2부. 플러터의 기초
- 3장. 위젯이 전부다
- UI도 코드로
- 플러터의 기본 위젯
- 값 위젯
- 레이아웃 위젯
- 내비게이션 위젯
- 기타 위젯
- 상태가 없는 위젯을 만드는 방법
- 키를 지니는 위젯
- 위젯으로 값 전달
- 상태가 없는 위젯과 상태를 지니는 위젯
- 둘 중 어떤 위젯을 만들어야 할까?
- 마무리
- 4장. 값 위젯
- Text 위젯
- Icon 위젯
- Image 위젯
- 내장 이미지
- 네트워크 이미지
- 이미지 크기 변경
- 입력 위젯
- 텍스트 필드
- 폼 위젯에 함께 배치
- Form 위젯
- FormField 위젯
- Form 예제
- 마무리
- 5장. 제스처 대응
- 다양한 버튼
- 레이즈드 버튼: RaisedButton
- 플랫 버튼과 아이콘 버튼: FlatButton, IconButton
- 플로팅 액션 버튼: FloatingActionButton
- 쿠퍼티노 버튼: CupertinoButton
- 디스미서블: Dismissible
- 커스텀 제스처
- 과정 1: 제스처와 동작 결정
- 과정 2: 커스텀 위젯 생성
- 과정 3: GestureDetector 위젯 추가
- 과정 4: 제스처와 동작 연결
- 예제 1: 길게 누르기에 대응
- 예제 2: 핀치로 새로운 항목 추가
- 예제 3: 왼쪽이나 오른쪽으로 스와이프
- 동시에 두 개 이상의 제스처가 일어날 때
- 마무리
- 다양한 버튼
- 6장. 위젯 레이아웃
- 전체 화면 레이아웃
- 머티리얼 앱 위젯: MaterialApp
- 스캐폴드 위젯: Scaffold
- 앱 바 위젯: AppBar
- 안전 영역 위젯: SafeArea
- 스낵 바 위젯: SnackBar
- 플러터가 위젯의 크기를 정하는 방법
- 무서운 “unbounded height” 에러
- 플러터의 레이아웃 알고리즘
- 위젯을 다른 위젯의 옆이나 아래에 놓는 방법
- 위젯은 절대로 맞아 떨어지지 않는다!
- 공간이 남을 때
- mainAxisAlignment
- crossAxisAlignment
- Expanded 위젯
- 공간이 부족할 때
- ListView 위젯
- Container 위젯과 박스 모델
- 컨테이너 안에서 정렬과 위치 지정
- 컨테이너의 크기를 정하는 방법
- 특별한 레이아웃 위젯
- Stack 위젯
- GridView 위젯
- Table 위젯
- 마무리
- 전체 화면 레이아웃
- 7장. 내비게이션과 라우팅
- 스택 내비게이션
- 앞뒤로 내비게이션
- 씬을 닫은 뒤에 결과 획득
- 드로어 내비게이션
- Drawer 위젯
- 드로어 채우기
- 탭 내이게이션
- TabController
- TabBarView
- 탭 바와 탭
- 화면 아래쪽의 탭 바
- 다이얼로그 위젯
- showDialog( )와 AlertDialog
- 다이얼로그의 응답 처리
- 내비게이션 방식의 조합
- 스택 내비게이션
- 8장. 위젯 꾸미기
- 플러터의 꾸미기
- 색상
- 텍스트 꾸미기
- TextStyle
- 커스텀 폰트
- 컨테이너 꾸미기
- 테두리
- BorderRadius
- BoxShape
- 위젯 쌓기
- Positioned 위젯
- Card 위젯
- 테마
- theme 속성 적용
- 마무리
- 9장. 상태 관리
- 상태의 의미
- StatefulWidget 안에서 벌어지는 일
- 상태의 가장 중요한 규칙
- 상태를 아래로 전달
- 상태 끌어 올리기
- 상태 관리 예제
- 상태를 사용해야 할 때
- 고급 상태 관리
- InheritedWidget
- BLoC
- ScopedModel
- 훅
- Provider
- Redux
- 상태 관리 패키지의 다양함
- 마무리
- 3부. 플러터 활용
- 10장. 파일을 사용하는 플러터 앱 개발
- 플러터 앱에 라이브러리 추가
- 라이브러리 검색
- pubspec.yaml에 라이브러리 추가
- 라이브러리 임포트
- 라이브러리 사용
- Future, async, await
- 대기해야 하는 이유
- Future에서 데이터를 얻는 방법
- await
- async
- 앱에 파일 추가
- 파일 생성
- 그리고 읽기
- JSON 형식
- 앱의 메모리를 JSON으로 저장
- 앱의 메모리로 JSON 읽기
- 공유 환경 설정
- 설정 저장
- 설정 읽기
- 마무리
- 플러터 앱에 라이브러리 추가
- 11장. HTTP로 RESTful API 호출
- API 호출의 뜻
- API 요청의 종류
- HTTP GET, DELETE 요청 생성
- HTTP PUT, POST, PATCH 요청 생성
- HTTP응답을 위젯과 결합
- 가장 간단한 방법인 무차별 대입
- 깔끔한 방법인 FutureBuilder
- 강력한 형식의 클래스
- 비즈니스 클래스 생성
- .fromJSON( ) 메서드 작성
- .fromJSON( )로 객체 수화
- API 호출 예제
- 서버 설정
- 플러터 앱 생성
- 강력한 형식의 비즈니스 클래스 생성
- PeopleList.dart
- 플러터에서 GET 요청
- 플러터에서 DELETE 요청
- PeopleUpsert.dart
- 플러터에서 POST와 PUT 요청
- 마무리
- 12장. 플러터에서 파이어베이스 활용
- 파이어베이스 소개
- 클라우드 파이어스토어
- 클라우드 함수
- 인증
- 파이어베이스 설정
- (1) 파이어베이스 프로젝트 생성
- (2) 데이터베이스 생성
- (3) iOS 앱 추가
- (4) 안드로이드 앱 추가
- (5) FlutterFire 플러그인 추가
- 파이어스토어 사용
- 컬렉션 GET
- 쿼리
- 업서트
- 삭제
- 앞으로 가야 할 방향
- 파이어베이스 소개
- 부록 A. 다트 언어 개요
도서 오류 신고
정오표
정오표
[p.106 : 예제 3행]
베경을 빨간색으로 칠한다.
->
배경을 빨간색으로 칠한다.