Процесс входа/выхода из системы: Android Jetpack Compose и CompositionLocal

CompositionLocal полезен, когда вы хотите создать зависимость в более высоком узле дерева макета и использовать ее на более низком узле без необходимости передавать ее вниз по дереву через каждый дочерний Composable.

Здесь мы будем использовать его для управления нашим приложением, когда пользователь входит в систему и выходит из нее.

  1. Когда пользователь успешно вошел в систему (isLoggedIn = true), он перенаправляется к остальным представлениям приложения.
  2. Когда пользователь выходит (isLoggedIn = false) в любой момент в приложении, он перенаправляется на страницу входа.

Нам понадобятся следующие компоненты:

  1. Модель представления состояния пользователя
  2. Переключатель приложений
  3. Экран входа
  4. Домашний экран

Модель представления состояния пользователя

Модель представления пользовательского состояния отслеживает и транслирует наш пользовательский статус. Мы собираемся сохранить эту модель представления в CompositionLocal.

Мы делаем наш экземпляр модели представления доступным для всех дочерних компонуемых объектов, начиная с компонуемого ApplicationSwitcher.

Переключатель приложений

Экран входа

Экран входа теперь может использовать UserStateViewModel для вызова signIn.

Главный экран с кнопкой выхода

Главный экран также использует UserStateViewModel для вызова signOut.

Переключатель приложений постоянно отслеживает состояние isLoggedIn :