Kotlin & Android с нуля – Иван Ветров
Иконка канала Kotlin & Android с нуля – Иван Ветров

Kotlin & Android с нуля – Иван Ветров

125 подписчиков

7просмотров

Пиши код бесплатно в WorkAI — 0 рублей, без ограничений. Открываешь список моделей, выбираешь «WorkAI Free» — под капотом лучшие бесплатные модели, без API-ключей и VPN. Пишешь задачу словами — получаешь готовый код. Скачивай и повторяй: https://workai.su/?utm_source=rutube&utm_medium=shorts&utm_campaign=workai_1 #WorkAI #ИИ #код #бесплатно #it

3просмотра

🎯 Обучение 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

133просмотра

🎯 Обучение 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

7просмотров

🎯 Обучение 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

109просмотров

🎯 Обучение 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

110просмотров

🎯 Обучение 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 #ЧистыйКод #КотлинРазработка #МобильнаяРазработка

620просмотров

🎯 Обучение IT профессиям c ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Проблема: при рекомпозиции функция вызывается заново — и переменная инициализируется снова с нуля. Состояние сбрасывается. Решение — remember. Он запоминает объект MutableState при первом вызове. При следующей рекомпозиции вместо создания нового объекта — возвращает уже существующий. Каждый вызов composable функции получает свою независимую память. Поэтому два чекбокса — два независимых состояния, хотя код один. #JetpackCompose #Remember #State #AndroidDev #ComposeLifecycle #КотлинРазработка #МобильнаяРазработка

144просмотра

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Обычная переменная не триггерит рекомпозицию — Compose о ней просто не знает. Нужен MutableState. Создаёшь через mutableStateOf — строго типизированный объект. Теперь при каждом изменении его значения Compose автоматически запускает рекомпозицию. Никаких invalidate(), никаких ручных перерисовок. Просто присвоил новое значение — UI обновился. #JetpackCompose #MutableState #State #AndroidDev #ReactiveProgramming #КотлинРазработка #МобильнаяРазработка

180просмотров

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Jetpack Compose — декларативный фреймворк. Ты описываешь ЧТО должно быть на экране, а не КАК это нарисовать. Когда данные меняются — Compose сам обновляет UI. Но для этого нужна рекомпозиция. Звучит сложно? На деле это просто повторный вызов composable функции с новыми данными. Вот и вся магия. #JetpackCompose #Рекомпозиция #AndroidDev #Recomposition #КотлинРазработка #МобильнаяРазработка #Программирование

98просмотров

🎯 Обучение 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 #ЧистыйКод #БестПрактис #Программирование

112просмотров

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Создаёшь своё свойство-расширение для ColorScheme. Внутри геттер с проверкой темы - для светлой один цвет, для тёмной другой. Потом обращаешься к нему как MaterialTheme.colorScheme.subtitle. Чистая кастомизация без костылей. #JetpackCompose #Extension #CustomTheme #AndroidDev #КотлинРазработка #Кастомизация #Программирование

138просмотров

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Иерархия цветов в Material Design. Primary - основной цвет приложения для главных элементов, кнопок. Secondary - для менее акцентированных элементов, вторичных кнопок. Tertiary - дополнительный цвет для небольших декоративных элементов, иконок, индикаторов. Правильное использование этой иерархии делает приложение визуально приятным. #MaterialDesign #JetpackCompose #ColorScheme #UIDesign #AndroidDev #Дизайн #МобильнаяРазработка

141просмотр

🎯 Обучение 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 #МобильнаяРазработка #Программирование

9просмотров

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Любой composable элемент можно сделать кликабельным. Text, Image, Box - что угодно. Просто добавь модификатор .clickable { } с обработчиком клика. Не нужны специальные компоненты типа ImageButton. Это и есть сила модификаторов - они универсальны. #JetpackCompose #Clickable #Модификаторы #AndroidDev #Интерактивность #МобильнаяРазработка #Программирование

78просмотров

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Чтобы ripple-эффект работал корректно, ему нужно знать когда начинается и заканчивается взаимодействие. Для этого используется InteractionSource - он временно хранит информацию о том, что происходит с элементом (нажат, есть фокус). Без InteractionSource ripple не знает когда применять анимацию. #JetpackCompose #Ripple #InteractionSource #AndroidDev #UIEffects #МобильнаяРазработка #Программирование

58просмотров

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Для модификаторов критически важен порядок. Они применяются снизу вверх, как цепочка преобразований. Сделал clip(CircleShape) после clickable - ripple останется квадратным, потому что он применился раньше. Поставил clip перед clickable - ripple обрежется вместе с элементом. Порядок имеет значение. #JetpackCompose #Модификаторы #ОшибкиНовичков #AndroidDev #ВерсткаUI #БестПрактис #Программирование

10просмотров

🎯 Обучение 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 #Программирование

86просмотров

🎯 Обучение 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 #МобильнаяРазработка

13просмотров

🎯 Обучение IT профессиям с ИИ: https://aisprints.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Ставишь horizontalAlignment = Alignment.CenterHorizontally, а ничего не меняется. Проблема в том, что ширина контейнера по умолчанию равна ширине контента, wrap_content по сути. Центрировать особо нечего. Добавь модификатор fillMaxWidth() - и элементы выровняются по центру как надо. #JetpackCompose #Alignment #AndroidDev #ОшибкиНовичков #ВерсткаUI #МобильнаяРазработка #Программирование

140просмотров

🎯 Обучающая платформа c AI: https://androidsprint.ru/?utm_source=rutube&utm_medium=video&utm_campaign=shorts Первое с чем сталкивается каждый новичок - элементы накладываются друг на друга. Compose по умолчанию не знает как располагать элементы. Нужно явно указать с помощью layout контейнеров. Column - вертикально друг под другом, Row - горизонтально в ряд. Это основа основ. #JetpackCompose #ОшибкиНовичков #Layout #AndroidDev #ВерсткаUI #МобильнаяРазработка #Программирование