2021年5月28日金曜日

Jetpack Compose : Lifecycle.Event で処理をトリガーする

通知が有効になっているかどうか調べる処理 (NotificationManagerCompat.from(context).areNotificationsEnabled()) を毎 onResume で行い場合はこんな感じになる。 @Composable fun SampleScreen( notificationEnabled: Boolean, onCheckNotification: () -> Unit ) { val lifecycleObserver = remember(onCheckNotification) { LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { onCheckNotification() } } } val lifecycle = LocalLifecycleOwner.current.lifecycle DisposableEffect(lifecycle) { lifecycle.addObserver(lifecycleObserver) onDispose { lifecycle.removeObserver(lifecycleObserver) } } if (!notificationEnabled) { Text("通知設定がオフです") } } state hoisting だとこんな感じだけど、引数 ViewModel にするならこんな感じ。 @Composable fun SampleScreen( viewModel: SampleViewModel = viewModel(), ) { val lifecycleObserver = remember(viewModel) { LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_RESUME) { viewModel.updateNotificationEnabledState() } } } val lifecycle = LocalLifecycleOwner.current.lifecycle DisposableEffect(lifecycle) { lifecycle.addObserver(lifecycleObserver) onDispose { lifecycle.removeObserver(lifecycleObserver) } } if (!viewModel.notificationEnabled.value) { Text("通知設定がオフです") } }


0 件のコメント:

コメントを投稿