УДК 004.43
ББК 32.972
З26
Заметти Ф.
З26 Flutter на практике: Прокачиваем навыки мобильной разработки
с помощью открытого фреймворка от Google / пер. с анг. А. С. Тищенко. –
М.: ДМК Пресс, 2020. – 328 с.: ил.
ISBN 978-5-97060-808-1
Познакомьтесь с возможностями Flutter – открытого фреймворка от
Google. В книге описываются история Flutter, его функционал и конкретные
примеры использования. Вы узнаете, как создавать проекты на Flutter и грамотно
их структурировать, компоновать пользовательский интерфейс, используя
готовые элементы (виджеты, контролы, расширения), разрабатывать
серверные backend-приложения и подключаться к ним из Flutter-приложений.
Практическим результатом работы с книгой станет создание трех
полноценных приложений – органайзера, мессенджера и игры. Впоследствии
изучение материала книги позволит вам перейти к более сложным
проектам.
Издание предназначено для разработчиков, желающих создавать мобильные
приложения сразу для нескольких платформ на основе общей
базы исходных кодов. Наличие опыта разработки программного обеспечения
и знание основ iOS и Android приветствуется.
УДК 004.43
ББК 32.972
First published in English under the title Practical Flutter; Improve your Mobile Development
with Google’s Latest Open-Source SDK by Frank Zammetti, edition: 1.
This edition has been translated and published under licence from APress Media,
LLC, part of Springer Nature.
APress Media, LLC, part of Springer Nature takes no responsibility and shall not be
made liable for the accuracy of the translation.
Все права защищены. Любая часть этой книги не может быть воспроизведена
в какой бы то ни было форме и какими бы то ни было средствами без письменного
разрешения владельцев авторских прав
Материал, изложенный в данной книге, многократно проверен. Но, поскольку
вероятность технических ошибок все равно существует, издательство не может гарантировать
абсолютную точность и правильность приводимых сведений. В связи
с этим издательство не несет ответственности за возможные ошибки, связанные
с использованием книги.
ISBN 978-5-97060-808-1 (рус.)
Copyright © Frank Zammetti, 2019
ISBN 978-1-4842-4971-0 (анг.) © Оформление, издание, ДМК Пресс, 2020
Стр.5
Оглавление
Об авторе
О техническом рецензенте (обозревателе)
О переводе
Благодарности
Введение
ГЛАВА 1 FLUTTER: ПЛАВНОЕ ПОГРУЖЕНИЕ
Медитации над бездной
Что за (глупое) название?
Dart: язык богов?
Виджеты окружают!
Ближе к делу: плюсы и минусы Flutter
Хватит болтать, начинаем практику с Flutter!
Flutter SDK
Android Studio
Типичное приложение «Hello, World!»
Горячая перезагрузка: вот что я люблю!
Базовая структура приложения Flutter
Еще парочка моментов «под прикрытием»
Итого
ГЛАВА 2 МГНОВЕННОЕ РУКОВОДСТВО ПО DART
Вещи, которые вы должны знать
Все о комментариях – без лишних комментариев
Все меняется: переменные
Ну он и тип типы данных
Перечисления – если одного значения мало!
А ты его точно знаешь? Ключевые слова «as» и «is»
Плыть по течению: управление логикой потока команд
Больше, чем ничто: void
Операторы
Коротко про ООП в Dart
Кое-что о функциях
Что такое Assertions
Вне времени: асинхронность
12
13
14
15
16
18
18
19
21
23
27
30
30
31
32
40
42
44
45
46
46
47
49
51
56
57
57
59
60
62
71
73
74
7
Стр.8
Тсс, тихо! Библиотеки (и видимость)
Для тебя я сделаю исключение: обработка исключений
У меня есть сила: генераторы
Мета-Dart: метаданные
Пообобщаемся? Дженерики, или обобщения
Подведем итоги
ГЛАВА 3 СКАЖИ ПРИВЕТ МОЕМУ МАЛЕНЬКОМУ ДРУГУ FLUTTER ЧАСТЬ I
Набор виджетов
Layout (компоновка)
Навигация
Ввод данных
Диалоговые и всплывающие окна
Подведем итоги главы
ГЛАВА 4 СКАЖИ ПРИВЕТ МОЕМУ МАЛЕНЬКОМУ ДРУГУ FLUTTER ЧАСТЬ II
Виджеты стиля
Theme и ThemeData
Opacity
DecoratedBox
Transform
Анимации и переходы
AnimatedContainer
AnimatedCrossFade
AnimatedDefaultTextStyle
Несколько других: AnimatedOpacity, AnimatedPosition, PositionTransition, SlideTransition,
AnimatedSize, ScaleTransition, SizeTransition и RotationTransition
Drag и Drop
Просмотр данных
Table
DataTable
GridView
ListView и ListTile
Остальные виджеты
CircularProgressIndicator (CupertinoActivityIndicator)
и LinearProgressIndicator
Icon
Image
Chip
FloatingActionButton
PopupMenuButton
Базовые библиотеки
Основные библиотеки фреймворка Flutter
Библиотеки Dart
8
75
76
78
79
80
82
83
83
83
94
103
115
122
123
123
124
125
125
126
127
127
128
129
130
131
132
133
134
136
138
140
141
141
143
145
146
148
149
150
153
Стр.9
Вспомогательные библиотеки
Итого
ГЛАВА 5 FLUTTERBOOK ЧАСТЬ I
Что мы делаем?
Старт проекта
Конфигурации и библиотеки
Структура UI
Структура кода приложения
Отправная точка
Глобальные утилиты
Управление состоянием
Начнем с простого: заметки
Точка отсчета: Notes dart
Модель: NotesModel dart
Слой базы данных: NotesDBWorker dart
Экран списка: NotesList dart
Экран ввода: NotesEntry dart
Что в итоге
ГЛАВА 6 FLUTTERBOOK ЧАСТЬ II
Сделаем это: задачи
TasksModel dart
TasksDBWorker dart
Tasks dart
TasksList dart
TasksEntry dart
Назначим свидание: Appointments (встречи)
AppointmentsModel dart
AppointmentsDBWorker dart
Appointments dart
AppointementsList dart
AppointmentsEntry dart
Как с вами связаться: контакты
ContactsModel dart
ContactsDBWorker dart
Contacts dart
ContactsList dart
ContactsEntry dart
Подведем итоги
ГЛАВА 7 FLUTTERCHAT ЧАСТЬ I: СЕРВЕР
Можем ли мы это построить? Да, мы можем! Но что «это»?!
Node
156
157
158
158
160
161
162
163
163
166
168
172
172
174
175
179
184
191
192
192
192
193
193
193
196
197
197
198
198
198
204
206
206
207
207
207
211
217
218
218
219
9
Стр.10
Сохранение линий связи открытыми: socket io
Код сервера FlutterChat
Два Bits of State и Object заходят в Bar
Поймай меня, если сможешь: сообщения
Заходим в парадную дверь: проверка пользователей
Итого
ГЛАВА 8 FLUTTERCHAT ЧАСТЬ II: КЛИЕНТ
Model dart
Connector dart
Связанные с сервером функции сообщений
Связанные с клиентом обработчики сообщений
main dart
LoginDialog dart
Home dart
AppDrawer dart
Lobby dart
CreateRoom dart
UserList dart
Room dart
Меню
Содержимое главного экрана
Приглашение или исключение пользователей
Итого
ГЛАВА 9 FLUTTERHERO: ИГРА FLUTTER
История такова
Базовая компоновка
Структура каталога и исходные файлы компонентов
Конфигурация: pubspec yaml
Класс GameObject
Расширение GameObject: класс Enemy
Расширение GameObject: класс Player
Место, где все начинается: main dart
Основной игровой цикл и основная игровая логика
Начнем
Первичная инициализация
Коротко об анимациях во Flutter
Сброс состояния игры
Основной игровой цикл
Проверка на наличие столкновений
Размещение объекта в случайной точке
10
Строим форму
Вход для существующих пользователей
222
226
227
228
229
238
239
239
242
245
246
249
252
255
257
258
260
264
266
268
271
272
275
278
281
282
282
283
284
286
287
291
293
296
301
301
302
303
305
307
310
312
Стр.11
Передача энергии
Все под контролем: InputController dart
Что дальше?
Указатель
312
315
317
319
11
Стр.12