Skip to content

IceRock KMM "Делаем экран авторизации" #5 - замечания #18

@Alex009

Description

@Alex009

Адрес Codelab

Состав

  • Экран сплеша - просто иконка
  • Экран входа - по логину и паролю
  • Экран главный - просто текст “главная” и кнопка логаут

Флоу

  • открываем приложение, видим сплешскрин, он нас направляет на экран входа (если в sharedpreferences/userdefaults нет токена), либо на главный экран (если токен есть). С главного можем разлогиниться и вернуться на вход.

Тест флоу

  • Харкдод логина и пароля. Если не верный пароль вводим - ошибка. Если логин не верный - другая ошибка.

Используем

ViewModel, livedata, eventsDispatcher, multiplatform-settings, Napier, ViewBinding.

Подходы

  • Репозиторий, навигация координатором и navigation component.
  • Работа с multiplatform-settings оборачивается через класс KeyValueStorage чтобы были именованные свойства и не надо было ключи строковые в разных классах юзать.

Не забыть

  • Не используем Fields, errors.
  • Показываем лоадер при загрузке.
  • Показываем ошибку алертом.
  • Логируем с Napier.
  • Указывать какие импорты нужно делать чтобы использовать классы новые.
  • Указать в итогах ссылку на готовое состояние - на ветку в бойлерплейте где все готово.
  • Не надо автоформатирование включать для маркдауна - лишние переносы строк ломают кодлабу.
  • Делать для новых терминов ссылку на терминологию.
  • исправить нестыковку - в кодлабе используется mvvm-viewbinding, а в самом бойлерплейте подключен mvvm-databinding - нужно поправить чтоб был viewbinding по умолчанию
  • При упоминании eventsdisptacher первый раз - ссылку на терминологию сделать, где надо пояснение зафиксировать, ниже черновик:

он как то привязан к жизненному циклу активити/фрагмента?"
Обычно в таких случаях используется SingleEventLiveData который завязан на lifecycleOwner что в свою очередь ограждает от получения событий когда экран не активен и их постдоставке при возврате на экран
EventsDispatcher как раз является заменой SingleEventLiveData с четким интерфейсом взаимодействия. Жизненный цикл контролится точно также как и у лайвдат. Реализация

Чему научимся

Делать простой экран с вводом данных, асинхронной загрузкой и сохранением данных.

Шаги

  1. Вводная
  2. Делаем сплешскрин
    1. Показываем публичный интерфейс общего кода - вьюмодель с листенером
    2. Тут делаем вьюмодель
    3. Делаем роутинг на некоторый пустой экран авторизации
    4. Делаем роутинг на некоторый пустой экран главной
    5. Делаем репозиторий user - пишем там работу с сеттингс
  3. Делаем сплеш на андроиде
  4. Делаем сплеш на айосе
  5. Делаем экран авторизации
    6. Показываем публичный интерфейс общего кода - вьюмодель, лайвдаты, листенер
    7. Тут делаем вьюмодель
    8. Делаем роутинг на главный
    9. Пишем в репозиторий user - сохранем в сетинг и запросы шлем
  6. Делаем авторизацию и главный на андроиде
  7. Делаем авторизацию и главный на айосе
  8. Итоги

Metadata

Metadata

Labels

documentationImprovements or additions to documentation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions