Выбор ответа Middle Compose: состояние и side-effects обновлено
Корутина по клику в Compose
Вопрос
Как запустить анимацию скролла listState.animateScrollToItem(0) по нажатию кнопки?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: rememberCoroutineScope() и scope.launch { } в onClick. rememberCoroutineScope даёт scope, привязанный к композиции: корутины отменятся, когда composable уйдёт с экрана.
Варианты ответа
LaunchedEffect(Unit) { }прямо внутриonClickGlobalScope.launch(Dispatchers.Main) { }вonClickrememberCoroutineScope()иscope.launch { }вonClickправильный ответrunBlocking { }вonClick, анимация ведь короткая
Разбор
rememberCoroutineScope даёт scope, привязанный к композиции: корутины отменятся, когда composable уйдёт с экрана. Его используют для запуска из колбэков. LaunchedEffect это composable, вызвать его в onClick нельзя. GlobalScope не отменится, runBlocking заблокирует главный поток.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.