#android #android-viewmodel #android-navigation #android-jetpack-compose
#Android #android-ViewModel #android-навигация #android-jetpack-compose
Вопрос:
Допустим, у нас есть форма регистрации, которая охватывает несколько экранов, таких как:
Итак, я создал область видимости ViewModel, охватывающую эти экраны:
Проблема в том, что, поскольку область действия состояния распределена по экранам, выполняется: PersonalInfo Screen -> Set Username Screen -> (pressed back) Personal Info Screen
сделайте это так:
Обратите внимание, что username
состояние сохраняется (поскольку область видимости ViewModel распространяется на весь поток). Поэтому, когда пользователь возвращается Set Username Screen
вместо пустого состояния, он сохраняет предыдущее состояние. (Но мне нужно, чтобы это было очищено)
Итак, что мне действительно нужно, так это либо:
- Быть в состоянии узнать, полностью ли удален экран before (не из-за изменений конфигурации устройства или перехода в backstack), чтобы я мог вручную очистить состояние.
- Или сделайте что-то вроде этого:
что означает наличие вложенной навигации поверх вложенной навигации (что, я не думаю, является правильным подходом?).
- Другой вариант — использовать область видимости ViewModel только на экране и передавать состояние по экранам во время навигации, но я нахожу это очень утомительным, особенно когда есть много состояний для передачи на нескольких экранах.
Я что-то упускаю из виду? Есть ли рекомендуемый способ сделать это?
Комментарии:
1. Я знаю, что это может быть примером здесь. Но в предлагаемом потоке «Ввод и просмотр» обычно очень важно сохранить эту информацию, чтобы пользователю не приходилось повторно вводить все после обнаружения ошибки. Это, конечно, другая история, когда выбор зависит от предыдущих данных, и в этом случае существует множество решений. Я бы лично выбрал единую ViewModel, где изменение «базовых» данных очистит «зависимости»