Skip to content

[ANDROID– 86]: Верстка экрана Авторизация #117

Open
Gaileks wants to merge 2 commits intoepic/ANDR-81from
feature/ANDROID-86
Open

[ANDROID– 86]: Верстка экрана Авторизация #117
Gaileks wants to merge 2 commits intoepic/ANDR-81from
feature/ANDROID-86

Conversation

@Gaileks
Copy link
Collaborator

@Gaileks Gaileks commented Mar 4, 2026

🧩 Что сделано:
Верстка экрана Авторизация
Верстка основного контейнера и заголовка.
Создание полей ввода:
o Поле Email с плейсхолдером.
o Поле Password с возможностью переключения видимости (иконка "глаз").
Создание кнопки Вход с поддержкой состояний Enabled/Disabled/Loading.
Добавление текстовых кнопок Забыли пароль? и Зарегистрироваться.
Добавление иконки входа через Telegram.
Добавление мест для отображения ошибок валидации (красная рамка + текст под полем).
Создание всех необходимых Preview (StaticPreview
🗂 Затронутые модули:
feature -> authentication -> impl
core -> ui
📱Pixel perfect precision

image

Создание полей ввода:
o	Поле Email с плейсхолдером.
o	Поле Password с возможностью переключения видимости (иконка "глаз").
Создание кнопки Вход с поддержкой состояний Enabled/Disabled/Loading.
Добавление текстовых кнопок Забыли пароль? и Зарегистрироваться.
Добавление иконки входа через Telegram.
Добавление мест для отображения ошибок валидации (красная рамка + текст под полем).
Создание всех необходимых Preview (StaticPreview)
@Gaileks Gaileks force-pushed the feature/ANDROID-86 branch from ec3416f to 7b292cf Compare March 4, 2026 20:31
@@ -0,0 +1,11 @@
package ru.yeahub.authentication.impl.login.presentation

sealed interface LoginAction {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У нас нет такого понятия Action, у нас Event

Есть нейминг: Начинается с On

OnEmailChanged
OnPasswordChanged

И так далее

Вообще в верстке рано задумываться об ивентах, но раз уж сделал - давай доделаем

@Composable
fun LoginScreen(
state: LoginUiState,
onAction: (Todo) -> Unit,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут onEvent: (LoginScreenEvent) -> Unit

password: String,
isVisible: Boolean,
errorText: String?,
onValueChange: (String) -> Unit,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут тоже один onEvent, другие экшены не нужны по идее


@Preview(showBackground = true)
@Composable
fun LoginScreenPreview_Loading() {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Так как у тебя 3 состояния экрана, гоу их разнесем по функциям, чтобы в каждой функции было по 1 превью статическому

private val BLOCK_SPACING = 14.dp

@Composable
fun LoginScreen(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На сам экран еще не хватает динамического превью


import androidx.compose.runtime.Immutable

@Immutable
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это уже не нужно, надо почитать про strong skipping mode

@@ -0,0 +1,3 @@
package ru.yeahub.authentication.impl.login.presentation

data object Todo No newline at end of file
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это команды я так полагаю, назови нормально, внутри data object Todo

sealed interface LoginScreenCommand {
data object Todo: LoginScreenCommand
}

}

@Composable
private fun SocialRow(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно ли в первой итерации реализовывать альтернативный вход через соц сети?

) {
SocialIconButton(
iconRes = R.drawable.ic_telegram,
contentDescription = "Telegram",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если оставляем альтернативный вход тогда это нужно вынести в строковые ресурсы

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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants