Эта домашняя работа покрывает три темы домашних заданий:
- Архитектура MVVM для создания визарда регистрации пользователя.
- Работа с сетью - валидация адреса пользователя.
- Unit-тестирование.
Выполняйте задания в отдельных коммитах одного пулл-реквеста. Добавляйте коммиты по мере изучения материала.
В этом задании реализуем wizard экран-анкету приложения для знакомств:
- На первом фрагменте добавьте формы ввода имени, фамилии и даты рождения(добавьте маску в EditText и валидацию 18+). Если валидация не прошла, показывайте тост с ошибкой и блокируйте кнопку Далее.
- На втором фрагменте добавьте формы ввода: страны, города и адреса(улица + дом).
- На третьем выберите облако тегов из интересов (массив интересов заполните самостоятельно).
- На четвертом экране выведите всю введенную информацию.
- Реализуйте задания используя паттерн Single Activity, все вложенные экраны должны быть фрагментами.
- В качестве архитектурного паттерна используйте MVVM, валидацию, получение данных(облако тегов) распределите по правильным классам.
Используйте
ViewModel
иLiveData
илиStateFlow
. - При переходе с одного экрана на другой, сохраняйте информацию в in memory-хранилище
WizardCache
, его реализуйте самостоятельно. - Используйте Dagger2 или Hilt для того чтобы получать экземпляр
WizardCache
вViewModel
’ях фрагментов.
В этой домашней работе мы добавим сетевое взаимодействие.
- На втором экране(ввода адреса) объедините 3 поля для ввода в одно
- Добавьте к этому инпуту подсказки используя АПИ Дадата. Когда пользователь начинает вводить свой город и улицу, он должен увидеть предлагаемые варианты, которые приходит из Дадаты.
- В качестве сетевого клиента используйте Retrofit.
- Используйте suspend функции и корутины для асинхронного запроса в сеть. Корутины запускайте во ViewModel. Не забудьте про обработку ошибок и отмену корутин.
- Продумайте безопасное хранение ключа сервиса Дадата, например, в
local.properties
. Для этого можно воспользоваться плагином secrets-gradle-plugin. - Использование интерцептора для добавления заголовка с ключом сервиса Дадата приветствуется!
- Напишите unit-тесты для функции или модели валидации ввода на первом экране.
- Напишите unit-тесты для ViewModel, которая делает запрос в сеть и обрабатывает ответ. Для этого продумайте, как можно замокать сетевое API во ViewModel.