Обмежений доступ для гостей
Вам доступно 3 уроки з цього курсу безкоштовно.
- • Коментарі доступні тільки авторизованим користувачам
- • Прогрес зберігається тільки 0:00
Android: Kotlin + Jetpack Compose
Модуль 1. Старт: проєкт і Compose
Модуль 2. Компонування екрана
Column, Row, Box — три контейнери
Базові контейнери Compose та різниця між arrangement і alignment.
@Preview і каталог версій Gradle
Дивимось UI просто в IDE та розбираємось із libs.versions.toml і Compose BOM.
Модуль 3. Стан і взаємодія
remember і mutableStateOf: кнопка-лічильник
UI як функція від стану: перший інтерактивний екран.
rememberSaveable: пережити поворот екрана
Чому стан зникає при повороті та як зберегти його в Bundle.
State hoisting: дані вниз, події вгору
Виносимо стан із компонента та робимо його безстанним і придатним до перевикористання.
Модуль 4. Власна тема
Кольорові ролі Material 3
primary, onPrimary, background, surface — навіщо схемі ролі, а не просто палітра.
Color.kt і Theme.kt: своя тема
Створюємо пакет ui/theme і збираємо всі кольори застосунку в одному місці.
Темний режим і edge-to-edge
Перемикання теми разом із системою та малювання під системними панелями.
Модуль 5. Списки даних
data class і незмінність
Модель даних Note, метод copy та чому Compose любить незмінні об'єкти.
LazyColumn і ключі списку
Список без гальм навіть на тисячі елементів та навіщо кожному елементу key.
mutableStateListOf: список, що змінюється
Спостережувані колекції, додавання й видалення нотаток з оновленням UI.
Модуль 6. Навігація
Navigation Compose: NavHost і маршрути
Підключаємо бібліотеку навігації та описуємо екрани як маршрути-адреси.
Параметри маршруту та екран деталей
Передаємо id нотатки через маршрут і будуємо другий екран.
Scaffold і TopAppBar
Каркас екрана з шапкою, innerPadding та кнопка «Назад», що працює зі стеком.
Модуль 7. ViewModel і StateFlow
Навіщо ViewModel
Життєвий цикл Activity, чому дані зникають при повороті і хто їх має тримати.
UiState і StateFlow
Увесь стан екрана одним незмінним об'єктом та потік значень із бібліотеки корутин.
Під'єднуємо ViewModel до Compose
viewModel(), collectAsStateWithLifecycle та навігація без жодної логіки.
Модуль 8. Збереження налаштувань
DataStore і репозиторій
Сучасна заміна SharedPreferences та шар, що ховає джерело даних.
Корутини: suspend і viewModelScope
Асинхронний код без колбеків: suspend-функції, launch і stateIn.
Перемикач теми, що переживає перезапуск
З'єднуємо DataStore, ViewModel і тему — вибір користувача зберігається на диску.
Модуль 9. Мережа
Дозвіл INTERNET і підключення Retrofit
Перший запис у маніфесті, звичайні та небезпечні дозволи, бібліотека Retrofit.
Опис API: інтерфейс, DTO, NetworkModule
Retrofit перетворює HTTP-запити на методи Kotlin; навіщо розділяти DTO і модель.
Loading / Error / Data: три стани екрана
runCatching, обробка помилок мережі та when-блок для трьох станів UI.
Модуль 10. Реліз
Тексти в ресурсах і локалізація
strings.xml, кваліфікатори ресурсів та переклад застосунку без зміни коду.
Адаптивна іконка і версія застосунку
Векторна іконка під будь-яку форму лаунчера, versionCode і versionName.
Keystore і підпис APK
Створюємо ключ підпису, ховаємо паролі від git і налаштовуємо signingConfig.
R8: мінімізація і релізна збірка
isMinifyEnabled, правила ProGuard для Gson та перевірка релізу на пристрої.
Модуль 11. Діалоги та сповіщення
AlertDialog: підтвердження видалення
Діалог як частина стану екрана та патерн «Note? замість Boolean».
Snackbar і rememberCoroutineScope
Повідомлення внизу екрана, SnackbarHost у Scaffold та корутини в UI.
Системні сповіщення: канал і дозвіл
NotificationChannel, дозвіл POST_NOTIFICATIONS та NotificationCompat.
PendingIntent і BroadcastReceiver
Кнопка на сповіщенні, що працює навіть коли застосунок закритий.