Я использую новый экран-заставку 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
)
Есть ли личные предложения? Я новичок в размещении здесь.
приведенный выше код является примером, и именно так я пытался сделать до сих пор.
Проблема здесь
var keepSplashOpened = viewModel.state.keepSplashOpened
installSplashScreen().setKeepOnScreenCondition {
keepSplashOpened
}
Значение keepSplashOpened фиксируется только один раз и не обновляется. Чтобы исправить это, измените код на
installSplashScreen().setKeepOnScreenCondition {
viewModel.state.keepSplashOpened
}
Мне удалось решить проблему, когда онбординг появляется быстро перед уходом домой. В моем RootNavigationGraph он получает график, который будет домашним или приветственным, в зависимости от результата dataStore. И если он равен нулю, я передал приветственную графику по умолчанию, так что я сделал: я создал BlackScreen и черный график и передал его вместо приветствия в качестве начального пункта назначения, если график нулевой, это паллиатив, но это решает рсрс. Спасибо, дорогой!
Работает нормально, теперь появилась другая проблема rsrss. Перед переходом на главный экран ненадолго появляется начальный экран моей регистрации. Кажется, есть некоторая задержка при чтении переменной, сохраненной в DataStore.