Ответ
В Custom View можно использовать следующие методы для подписки на Flow:
LifecycleOwner+repeatOnLifecycle(рекомендуется для UI-компонентов):
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
flow.collect { value -> updateView(value) }
}
launchWhenStarted(устаревший, но рабочий вариант):
lifecycleScope.launchWhenStarted {
flow.collect { value -> updateView(value) }
}
- Ручное управление Job (если нет доступа к Lifecycle):
private var job: Job? = null
fun startCollecting() {
job = CoroutineScope(Dispatchers.Main).launch {
flow.collect { value -> updateView(value) }
}
}
fun stopCollecting() {
job?.cancel()
}
Важно: всегда отменяйте подписки в onDetachedFromWindow() или аналогичных методах жизненного цикла View. Для Compose используйте LaunchedEffect или collectAsState().