[ANDROID– 86]: Верстка экрана Авторизация #117
Conversation
Создание полей ввода: o Поле Email с плейсхолдером. o Поле Password с возможностью переключения видимости (иконка "глаз"). Создание кнопки Вход с поддержкой состояний Enabled/Disabled/Loading. Добавление текстовых кнопок Забыли пароль? и Зарегистрироваться. Добавление иконки входа через Telegram. Добавление мест для отображения ошибок валидации (красная рамка + текст под полем). Создание всех необходимых Preview (StaticPreview)
ec3416f to
7b292cf
Compare
| @@ -0,0 +1,11 @@ | |||
| package ru.yeahub.authentication.impl.login.presentation | |||
|
|
|||
| sealed interface LoginAction { | |||
There was a problem hiding this comment.
У нас нет такого понятия Action, у нас Event
Есть нейминг: Начинается с On
OnEmailChanged
OnPasswordChanged
И так далее
Вообще в верстке рано задумываться об ивентах, но раз уж сделал - давай доделаем
| @Composable | ||
| fun LoginScreen( | ||
| state: LoginUiState, | ||
| onAction: (Todo) -> Unit, |
There was a problem hiding this comment.
Тут onEvent: (LoginScreenEvent) -> Unit
| password: String, | ||
| isVisible: Boolean, | ||
| errorText: String?, | ||
| onValueChange: (String) -> Unit, |
There was a problem hiding this comment.
Тут тоже один onEvent, другие экшены не нужны по идее
|
|
||
| @Preview(showBackground = true) | ||
| @Composable | ||
| fun LoginScreenPreview_Loading() { |
There was a problem hiding this comment.
Так как у тебя 3 состояния экрана, гоу их разнесем по функциям, чтобы в каждой функции было по 1 превью статическому
| private val BLOCK_SPACING = 14.dp | ||
|
|
||
| @Composable | ||
| fun LoginScreen( |
There was a problem hiding this comment.
На сам экран еще не хватает динамического превью
|
|
||
| import androidx.compose.runtime.Immutable | ||
|
|
||
| @Immutable |
There was a problem hiding this comment.
Это уже не нужно, надо почитать про strong skipping mode
| @@ -0,0 +1,3 @@ | |||
| package ru.yeahub.authentication.impl.login.presentation | |||
|
|
|||
| data object Todo No newline at end of file | |||
There was a problem hiding this comment.
Это команды я так полагаю, назови нормально, внутри data object Todo
sealed interface LoginScreenCommand {
data object Todo: LoginScreenCommand
}
| } | ||
|
|
||
| @Composable | ||
| private fun SocialRow( |
There was a problem hiding this comment.
Нужно ли в первой итерации реализовывать альтернативный вход через соц сети?
| ) { | ||
| SocialIconButton( | ||
| iconRes = R.drawable.ic_telegram, | ||
| contentDescription = "Telegram", |
There was a problem hiding this comment.
Если оставляем альтернативный вход тогда это нужно вынести в строковые ресурсы
1. Архитектура: o Переименовал LoginAction → LoginScreenEvent с корректным неймингом (OnEmailChanged, OnPasswordChanged и т.д.) o Заменил Todo на LoginScreenCommand (оставил как заготовку) 2. UI компоненты: o Исправил передачу событий: теперь onEvent вместо onAction 3. Превью: o Добавил динамическое preview с PreviewParameterProvider (5 состояний) o Завернул все превью в StandardScreenSizePreview o Разнес статические превью по отдельным функциям 4. Удаление Telegram: o Убрал иконку Telegram, SocialRow и SocialIconButton o Удалил OnTelegramClick из событий o Добавил Spacer(height = 72.dp) для сохранения отступов o Удалил ресурс ic_telegram.xml из drawable o Удалил строковый ресурс telegram_content_description из strings.xml 5. Чистка: o Убрал аннотацию @immutable (strong skipping mode)
🧩 Что сделано:
Верстка экрана Авторизация
Верстка основного контейнера и заголовка.
Создание полей ввода:
o Поле Email с плейсхолдером.
o Поле Password с возможностью переключения видимости (иконка "глаз").
Создание кнопки Вход с поддержкой состояний Enabled/Disabled/Loading.
Добавление текстовых кнопок Забыли пароль? и Зарегистрироваться.
Добавление иконки входа через Telegram.
Добавление мест для отображения ошибок валидации (красная рамка + текст под полем).
Создание всех необходимых Preview (StaticPreview
🗂 Затронутые модули:
feature -> authentication -> impl
core -> ui
📱Pixel perfect precision