Процесс входа/выхода из системы: Android Jetpack Compose и CompositionLocal
CompositionLocal полезен, когда вы хотите создать зависимость в более высоком узле дерева макета и использовать ее на более низком узле без необходимости передавать ее вниз по дереву через каждый дочерний Composable.
Здесь мы будем использовать его для управления нашим приложением, когда пользователь входит в систему и выходит из нее.
- Когда пользователь успешно вошел в систему (isLoggedIn = true), он перенаправляется к остальным представлениям приложения.
- Когда пользователь выходит (isLoggedIn = false) в любой момент в приложении, он перенаправляется на страницу входа.
Нам понадобятся следующие компоненты:
- Модель представления состояния пользователя
- Переключатель приложений
- Экран входа
- Домашний экран
Модель представления состояния пользователя
Модель представления пользовательского состояния отслеживает и транслирует наш пользовательский статус. Мы собираемся сохранить эту модель представления в CompositionLocal.
Мы делаем наш экземпляр модели представления доступным для всех дочерних компонуемых объектов, начиная с компонуемого ApplicationSwitcher.
Переключатель приложений
Экран входа
Экран входа теперь может использовать UserStateViewModel для вызова signIn.
Главный экран с кнопкой выхода
Главный экран также использует UserStateViewModel для вызова signOut.
Переключатель приложений постоянно отслеживает состояние isLoggedIn :