🎯 Обучение IT профессиям c ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Работая с MutableState, постоянно пишешь .value — isChecked.value для чтения, isChecked.value = it для записи. Это утомляет.
Kotlin решает это делегатом by.
Пишешь var isChecked by remember { mutableStateOf(true) }. Теперь isChecked — это просто Boolean.
Читаешь и пишешь напрямую, без .value. Делегат сам управляет обращением к MutableState под капотом.
Код стал чище, поведение — то же самое.
#jetpackcompose #KotlinDelegates #MutableState #AndroidDev #ЧистыйКод #КотлинРазработка #МобильнаяРазработка
🎯 Обучение IT профессиям c ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Проблема: при рекомпозиции функция вызывается заново — и переменная инициализируется снова с нуля. Состояние сбрасывается.
Решение — remember. Он запоминает объект MutableState при первом вызове.
При следующей рекомпозиции вместо создания нового объекта — возвращает уже существующий.
Каждый вызов composable функции получает свою независимую память.
Поэтому два чекбокса — два независимых состояния, хотя код один.
#JetpackCompose #Remember #State #AndroidDev #ComposeLifecycle #КотлинРазработка #МобильнаяРазработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Обычная переменная не триггерит рекомпозицию — Compose о ней просто не знает. Нужен MutableState.
Создаёшь через mutableStateOf — строго типизированный объект.
Теперь при каждом изменении его значения Compose автоматически запускает рекомпозицию.
Никаких invalidate(), никаких ручных перерисовок.
Просто присвоил новое значение — UI обновился.
#JetpackCompose #MutableState #State #AndroidDev #ReactiveProgramming #КотлинРазработка #МобильнаяРазработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Jetpack Compose — декларативный фреймворк.
Ты описываешь ЧТО должно быть на экране, а не КАК это нарисовать.
Когда данные меняются — Compose сам обновляет UI. Но для этого нужна рекомпозиция.
Звучит сложно? На деле это просто повторный вызов composable функции с новыми данными. Вот и вся магия.
#JetpackCompose #Рекомпозиция #AndroidDev #Recomposition #КотлинРазработка #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Множество модификаторов текста повторяются - fontSize, fontFamily, lineHeight.
Всё это можно вынести в Typography.
Файл Type.kt - там определяешь стили один раз: headlineLarge, bodyMedium, labelSmall.
Потом используешь style = MaterialTheme.typography.bodyMedium.
Единый стиль текста по всему приложению, без дублирования.
#JetpackCompose #Typography #Типографика #AndroidDev #ЧистыйКод #БестПрактис #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Создаёшь своё свойство-расширение для ColorScheme.
Внутри геттер с проверкой темы - для светлой один цвет, для тёмной другой.
Потом обращаешься к нему как MaterialTheme.colorScheme.subtitle.
Чистая кастомизация без костылей.
#JetpackCompose #Extension #CustomTheme #AndroidDev #КотлинРазработка #Кастомизация #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Иерархия цветов в Material Design.
Primary - основной цвет приложения для главных элементов, кнопок.
Secondary - для менее акцентированных элементов, вторичных кнопок.
Tertiary - дополнительный цвет для небольших декоративных элементов, иконок, индикаторов.
Правильное использование этой иерархии делает приложение визуально приятным.
#MaterialDesign #JetpackCompose #ColorScheme #UIDesign #AndroidDev #Дизайн #МобильнаяРазработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Размещая контент внутри функции MaterialTheme, ты получаешь доступ к цветам темы.
MaterialTheme.colorScheme.primary, secondary, onBackground.
Эти цвета автоматически меняются в зависимости от темы устройства - светлая или тёмная.
Не нужно писать if/else для проверки темы.
#JetpackCompose #MaterialTheme #ТемнаяТема #AndroidDev #UIDesign #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Любой composable элемент можно сделать кликабельным. Text, Image, Box - что угодно.
Просто добавь модификатор .clickable { } с обработчиком клика.
Не нужны специальные компоненты типа ImageButton. Это и есть сила модификаторов - они универсальны.
#JetpackCompose #Clickable #Модификаторы #AndroidDev #Интерактивность #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Чтобы ripple-эффект работал корректно, ему нужно знать когда начинается и заканчивается взаимодействие.
Для этого используется InteractionSource - он временно хранит информацию о том, что происходит с элементом (нажат, есть фокус).
Без InteractionSource ripple не знает когда применять анимацию.
#JetpackCompose #Ripple #InteractionSource #AndroidDev #UIEffects #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Для модификаторов критически важен порядок.
Они применяются снизу вверх, как цепочка преобразований.
Сделал clip(CircleShape) после clickable - ripple останется квадратным, потому что он применился раньше.
Поставил clip перед clickable - ripple обрежется вместе с элементом.
Порядок имеет значение.
#JetpackCompose #Модификаторы #ОшибкиНовичков #AndroidDev #ВерсткаUI #БестПрактис #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Как сделать кнопки одинаковой ширины в Row?
Добавь Modifier.weight(1f) к каждой кнопке. Это говорит, что элемент должен занимать равную долю доступного пространства.
Три кнопки с weight(1f) - каждая займёт 1/3 ширины контейнера.
Адаптивная вёрстка без костылей.
#JetpackCompose #Weight #Модификаторы #АдаптивнаяВёрстка #AndroidDev #ВерсткаUI #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Alignment и Arrangement часто путают.
Alignment управляет тем, ГДЕ именно элемент находится внутри контейнера - слева, справа, по центру.
Arrangement определяет, КАК распределяется пространство МЕЖДУ элементами - SpaceEvenly, SpaceBetween, SpaceAround.
Разные задачи, разные инструменты.
#JetpackCompose #Layout #Alignment #AndroidDev #ВерсткаUI #МобильнаяРазработка
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Ставишь horizontalAlignment = Alignment.CenterHorizontally, а ничего не меняется.
Проблема в том, что ширина контейнера по умолчанию равна ширине контента, wrap_content по сути. Центрировать особо нечего.
Добавь модификатор fillMaxWidth() - и элементы выровняются по центру как надо.
#JetpackCompose #Alignment #AndroidDev #ОшибкиНовичков #ВерсткаUI #МобильнаяРазработка #Программирование
🎯 Обучающая платформа c AI: https://androidsprint.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Первое с чем сталкивается каждый новичок - элементы накладываются друг на друга.
Compose по умолчанию не знает как располагать элементы.
Нужно явно указать с помощью layout контейнеров.
Column - вертикально друг под другом, Row - горизонтально в ряд.
Это основа основ.
#JetpackCompose #ОшибкиНовичков #Layout #AndroidDev #ВерсткаUI #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Preview - одна из киллер-фич Compose.
Composable функции отрисовываются прямо в Android Studio, без сборки проекта и установки APK.
Добавляешь аннотацию @Preview, жмёшь Split - и видишь результат. Изменил код - обновил превью.
Экономия времени колоссальная по сравнению с XML.
#JetpackCompose #AndroidStudio #Preview #Productivity #AndroidDev #МобильнаяРазработка #ЭкономияВремени
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Scaffold - это базовый каркас экрана, строительные леса если дословно.
Он автоматически рассчитывает системные отступы, чтобы контент не перекрывал статусбар и навбар.
Можешь добавить TopBar, BottomBar, FAB. Android Studio при создании проекта сразу предлагает использовать Scaffold, это хорошая практика.
#JetpackCompose #Scaffold #AndroidDev #ВерсткаUI #БестПрактис #МобильнаяРазработка #Программирование
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Пишешь 16.dp и оно просто работает. Что это вообще такое?
dp - это свойство-расширение класса Int в Kotlin. Оно преобразует число в пиксели, независимые от плотности экрана.
dp для размеров элементов, sp для размеров шрифтов.
Удобный синтаксис вместо Resources.getDimensionPixelSize().
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Зачем нужен Modifier, если у Text и так куча параметров?
Параметры функции отвечают за внешний вид самого текста - цвет, размер, шрифт.
А Modifier управляет поведением и размещением - отступы, фон, размеры, можно повесить слушатель кликов.
Модификатор универсален и работает с любыми элементами.
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Composable функция ничего не возвращает.
Нет return View, нет return Layout.
UI рисуется исключительно за счёт вызова метода.
Вызвал функцию - отрисовался элемент.
Это декларативность в чистом виде, непривычно для тех, кто пришёл с XML.
#JetpackCompose #Декларативность #AndroidDev #КотлинРазработка #МобильнаяРазработка #ITОбразование
