检查是否在启动期间首次使用该应用程序
Check if first time using the app during launch
我正在尝试第一次使用屏幕(就像任何其他应用程序一样,当您在第一次使用该应用程序之前必须填写一些选项时)。
我无法在主 activity 上创建另一个 Jetpack compose 状态,因为它会检查每个重组,并将我带到导航路径(我想在启动期间检查一次数据存储条目),这是我已经尝试过的,但似乎没有用:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
val onBoardingStatus = dataStoreManager.onBoard.first()
setContent {
val navController = rememberNavController()
OnBoardingNavHost(navController)
navController.navigate(if (onBoardingStatus) "on_boarding" else "main") {
launchSingleTop = true
popUpTo(0)
}
}
}
}
可以只检查一次(例如在应用程序 class 中而不是在 oncreate 中?)
请指教,
提前致谢
你必须为此使用LaunchedEffect
,你可以这样做
enum class OnboardState {
Loading,
NoOnboarded,
Onboarded,
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var onboardingState by remember {
mutableStateOf(OnboardState.Loading)
}
LaunchedEffect(Unit) {
onboardingState = getOnboardingState()
}
when (onboardingState) {
OnboardState.Loading -> showSpinner()
OnboardState.NoOnboarded -> LaunchedEffect(onboardingState) {
navigateToOnboarding()
}
OnboardState.Onboarded -> showContent()
}
}
}
我正在尝试第一次使用屏幕(就像任何其他应用程序一样,当您在第一次使用该应用程序之前必须填写一些选项时)。 我无法在主 activity 上创建另一个 Jetpack compose 状态,因为它会检查每个重组,并将我带到导航路径(我想在启动期间检查一次数据存储条目),这是我已经尝试过的,但似乎没有用:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
val onBoardingStatus = dataStoreManager.onBoard.first()
setContent {
val navController = rememberNavController()
OnBoardingNavHost(navController)
navController.navigate(if (onBoardingStatus) "on_boarding" else "main") {
launchSingleTop = true
popUpTo(0)
}
}
}
}
可以只检查一次(例如在应用程序 class 中而不是在 oncreate 中?) 请指教, 提前致谢
你必须为此使用LaunchedEffect
,你可以这样做
enum class OnboardState {
Loading,
NoOnboarded,
Onboarded,
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var onboardingState by remember {
mutableStateOf(OnboardState.Loading)
}
LaunchedEffect(Unit) {
onboardingState = getOnboardingState()
}
when (onboardingState) {
OnboardState.Loading -> showSpinner()
OnboardState.NoOnboarded -> LaunchedEffect(onboardingState) {
navigateToOnboarding()
}
OnboardState.Onboarded -> showContent()
}
}
}