Заставка застряла

Я использую новый экран-заставку Android с Jetpack Compose. У меня проблема с логикой моего приложения. У него есть экран презентации (онбординг), а на его последней странице есть кнопка для подтверждения, в этом подтверждении я сохраняю логическую переменную как true в DataStore.

Логика, которую я сделал, мой экран-заставка застрял, и я не знаю, где я мог пойти не так. следуйте кодам:

Основная деятельность

@AndroidEntryPoint
class MainActivity : ComponentActivity() {

    private val viewModel: SplashViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        var keepSplashOpened = viewModel.state.keepSplashOpened
        installSplashScreen().setKeepOnScreenCondition {
            keepSplashOpened
        }
        setContent {
            val window = rememberWindowSizeClass()
            KippTheme(window) {
                val graph = viewModel.state.graphs
                RootNavigationGraph(
                    graph = graph,
                    onDataLoaded = {
                        keepSplashOpened = false
                    }
                )
            }
        }
    }
}

SplashViewModel

@HiltViewModel
class SplashViewModel @Inject constructor(
    private val readOnBoardingUseCase: ReadOnBoardingUseCase
) : ViewModel() {

    var state by mutableStateOf(SplashState())

    init {
        viewModelScope.launch {
            readOnBoardingUseCase().collect { completed ->
                state = if (completed) {
                    state.copy(graphs = Graph.HOME, keepSplashOpened = false)
                } else {
                    state.copy(graphs = Graph.WELCOME, keepSplashOpened = false)
                }
            }
        }
    }
}

SplashState

data class SplashState(
    val graphs: String? = null,
    var keepSplashOpened: Boolean = true
)

Есть ли личные предложения? Я новичок в размещении здесь.

приведенный выше код является примером, и именно так я пытался сделать до сих пор.

0
0
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема здесь

var keepSplashOpened = viewModel.state.keepSplashOpened
installSplashScreen().setKeepOnScreenCondition {
    keepSplashOpened
}

Значение keepSplashOpened фиксируется только один раз и не обновляется. Чтобы исправить это, измените код на

installSplashScreen().setKeepOnScreenCondition {
    viewModel.state.keepSplashOpened
}

Работает нормально, теперь появилась другая проблема rsrss. Перед переходом на главный экран ненадолго появляется начальный экран моей регистрации. Кажется, есть некоторая задержка при чтении переменной, сохраненной в DataStore.

Daniel Lopes 06.04.2023 13:50

Мне удалось решить проблему, когда онбординг появляется быстро перед уходом домой. В моем RootNavigationGraph он получает график, который будет домашним или приветственным, в зависимости от результата dataStore. И если он равен нулю, я передал приветственную графику по умолчанию, так что я сделал: я создал BlackScreen и черный график и передал его вместо приветствия в качестве начального пункта назначения, если график нулевой, это паллиатив, но это решает рсрс. Спасибо, дорогой!

Daniel Lopes 06.04.2023 14:11

Другие вопросы по теме