Как сделать мгновенное поведение при первом запуске?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как сделать мгновенное поведение при первом запуске?

Сообщение Anonymous »

Мое приложение начинается здесь...

class MainActivity : AppCompatActivity() {
private lateinit var navController: NavHostController

private val promptManager by lazy {
BiometricAuthentication(this)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
navController = rememberNavController()
SetupNavGraph(navController = navController, promptManager = promptManager)
}
}
}


Внедрение
@Composable
fun OnBoarding(navController: NavController, viewModel: FirstTimeViewModel) {
val isFirstTime by viewModel.isFirstTime.collectAsStateWithLifecycle()
Surface(color = MaterialTheme.colorScheme.onPrimary) {
when (isFirstTime) {
null -> {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
color = Color.Blue
)
}
}

true -> {
// First time launch
OnBoardingScreenHorizontalPager(navController)
}

else -> {
// Non-first time launch
NonFirstTimeContent()
}
}
}
}

Компонуемый объект OnBoardingScreenHorizontalPager вызывает серию компонуемых объектов, но это не важно для этого вопроса, он в конечном итоге вызовет Composable RegisterName.
NavHost
@Composable
fun SetupNavGraph(
navController: NavHostController,
promptManager: BiometricAuthentication
) {
NavHost(
navController = navController,
startDestination = Screens.Onboarding.route
) {
composable(route = Screens.Onboarding.route) {
OnBoarding(navController = navController, viewModel = viewModel())
}
composable(route = Screens.OnboardingRegistration.route){
RegisterUserPage(navController = navController, promptManager = promptManager)
}

composable(route = Screens.NonFirstTime.route){
RegisterName(viewModel = viewModel())
}
}
}


Здесь можно составить имя регистра
@Composable
fun RegisterName(
viewModel: FirstTimeViewModel
) {
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
) {
Button(
onClick = {
viewModel.onFirstTime()
},
shape = RoundedCornerShape(26.dp),
colors = ButtonDefaults.buttonColors(
containerColor = colorResource(id = R.color.onboarding_green)
),
modifier = Modifier
.width(200.dp)
.height(50.dp)
) {
Text(
text = stringResource(id = R.string.continue_registration),
fontFamily = montserratFamily,
fontWeight = FontWeight.W800,
color = colorResource(id = R.color.white)
)
}
}
}


После нажатия кнопки ничего не происходит, но после того, как я перезапускаю приложение после закрытия, оно попадает в составную функцию NonFirstTimeContent() из Onboarding Composable. Как сделать это мгновенно?
здесь также код обработки хранилища данных
// SettingsDataStoreManager.kt
private val Context.dataStore: DataStore by preferencesDataStore(name = "settings")

class SettingsDataStoreManager(context: Context) {
private val dataStore = context.dataStore

suspend fun setFirstTime(isFirstTime: Boolean) {
dataStore.edit { preferences ->
preferences[isFirstTimeLaunchKey] = isFirstTime
}
}

fun isFirstTimeLaunch(): Flow =
dataStore.data.map { pref ->
pref[isFirstTimeLaunchKey] ?: true
}

companion object {
private val isFirstTimeLaunchKey = booleanPreferencesKey("isFirstTime")
}
}

// FirstTimeViewModel.kt
class FirstTimeViewModel(application: Application) : AndroidViewModel(application) {
private val dataStore = SettingsDataStoreManager(application)

val isFirstTime: StateFlow = dataStore.isFirstTimeLaunch()
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(),
initialValue = null,
)

fun onFirstTime() {
viewModelScope.launch {
dataStore.setFirstTime(false)
}
}
}



Подробнее здесь: https://stackoverflow.com/questions/793 ... ur-instant
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»