Пиши код бесплатно в WorkAI — 0 рублей, без ограничений.
Открываешь список моделей, выбираешь «WorkAI Free» — под капотом лучшие бесплатные модели, без API-ключей и VPN.
Пишешь задачу словами — получаешь готовый код.
Скачивай и повторяй: https://workai.su/?utm_source=rutube&utm_medium=shorts&utm_campaign=workai_1
#WorkAI #ИИ #код #бесплатно #it
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Урок 9 "TextField, OutlinedTextField, Валидация почты, ErrorState | Курс Android Jetpack Compose": https://rutube.ru/video/112d95678b8e18ac1651aa8db8ac0619
Стейт может хранить что угодно — Boolean, код ошибки или целый объект.
Здесь `errorState` — обычная строка: пустая означает «ошибок нет», непустая — текст для пользователя.
В `onValueChange` регулярка проверяет введённый текст на формат email: совпало — `errorState = ""`, нет — `errorState = "Введите корректный email"`.
А `isError = errorState.isNotEmpty()` убирает хардкод и делает подсветку живой.
Один стейт — полный контроль над валидацией.
#JetpackCompose #Validation #EmailValidation #ErrorState #AndroidDev #Kotlin #МобильнаяРазработка #Программирование #State #ComposeUI
🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Урок 9 "TextField, OutlinedTextField, Валидация почты, ErrorState | Курс Android Jetpack Compose": https://rutube.ru/video/112d95678b8e18ac1651aa8db8ac0619
Хочешь кнопку прямо внутри текстового поля?
В TextField есть два параметра: `leadingIcon` — иконка в начале, `trailingIcon` — в конце.
Оба принимают composable-функцию.
Передаёшь `IconButton` — у него обязательный `onClick`.
Внутри лямбды вызываешь `Icon` и задаёшь `imageVector = Icons.Filled.Clear`.
Два параметра, одна лямбда — и у пользователя появляется кнопка очистки поля.
#JetpackCompose #IconButton #OutlinedTextField #trailingIcon #AndroidDev #Kotlin #МобильнаяРазработка #UIDesign #Программирование #ComposeUI
🎯 Обучение IT профессиям c ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Добавил OutlinedTextField — курсор есть, но ввести ничего нельзя.
Звучит знакомо? Та же история, что с чекб оксом.
Compose не знает, когда вызывать рекомпозицию.
Решение: `var textState by remember { mutableStateOf("") }`. Передаём textState в value, в onValueChange присваиваем новое значение.
Поле ожило — каждый введённый символ триггерит рекомпозицию автоматически.
#JetpackCompose #OutlinedTextField #MutableState #State #AndroidDev #Kotlin #Рекомпозиция #МобильнаяРазработка #Программирование #remember
🎯 Обучение IT профессиям c ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts
Переходишь с XML на Jetpack Compose и ищешь EditText? Его там нет.
Вместо него — три варианта.
TextField — стандартное поле, заполненный фон.
OutlinedTextField — то же самое, но с рамкой вместо фона.
BasicTextField — низкоуровневый компонент для полной кастомизации.
Для большинства задач хватит OutlinedTextField. BasicTextField — только если нужно что-то нестандартное.
#JetpackCompose #TextField #OutlinedTextField #AndroidDev #EditText #МобильнаяРазработка #Программирование #AndroidРазработка #Kotlin #Compose
🎯 Обучение 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 #МобильнаяРазработка
