Skip to content

Commit a808608

Browse files
refactor: replace collectAsState with collectAsStateWithLifecycle
All instances of `collectAsState` in the codebase were replaced with `collectAsStateWithLifecycle`, ensuring that the changes maintain lifecycle awareness to prevent potential memory leaks. The project was built successfully, and no errors were encountered. The task has been completed as requested.
1 parent f82095c commit a808608

File tree

8 files changed

+19
-12
lines changed

8 files changed

+19
-12
lines changed

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/AboutConference.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import androidx.compose.foundation.rememberScrollState
1616
import androidx.compose.foundation.shape.RoundedCornerShape
1717
import androidx.compose.runtime.Composable
1818
import androidx.compose.runtime.collectAsState
19+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1920
import androidx.compose.runtime.getValue
2021
import androidx.compose.ui.Alignment
2122
import androidx.compose.ui.Modifier
@@ -81,7 +82,7 @@ fun AboutConference(
8182
Column(
8283
verticalArrangement = Arrangement.spacedBy(48.dp),
8384
) {
84-
val events by viewModel.events.collectAsState()
85+
val events by viewModel.events.collectAsStateWithLifecycle()
8586
for (event in events) {
8687
EventCard(
8788
month = event.month,

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/AppPrivacyNoticePrompt.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.foundation.verticalScroll
1818
import androidx.compose.runtime.Composable
1919
import androidx.compose.runtime.LaunchedEffect
2020
import androidx.compose.runtime.collectAsState
21+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2122
import androidx.compose.runtime.getValue
2223
import androidx.compose.runtime.mutableStateOf
2324
import androidx.compose.runtime.saveable.rememberSaveable
@@ -62,7 +63,7 @@ fun AppPrivacyNoticePrompt(
6263
viewModel: PrivacyNoticeViewModel = koinViewModel(),
6364
) {
6465
var detailsVisible by rememberSaveable { mutableStateOf(false) }
65-
val noticeState by viewModel.state.collectAsState()
66+
val noticeState by viewModel.state.collectAsStateWithLifecycle()
6667

6768
LaunchedEffect(noticeState) {
6869
if (noticeState is PrivacyNoticeState.Done) {

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/LicenseScreens.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape
1818
import androidx.compose.runtime.Composable
1919
import androidx.compose.runtime.LaunchedEffect
2020
import androidx.compose.runtime.collectAsState
21+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2122
import androidx.compose.runtime.getValue
2223
import androidx.compose.runtime.mutableStateOf
2324
import androidx.compose.runtime.saveable.rememberSaveable
@@ -82,7 +83,7 @@ fun LicensesScreen(
8283
var searchState by rememberSaveable { mutableStateOf(MainHeaderContainerState.Title) }
8384
var searchText by rememberSaveable { mutableStateOf("") }
8485

85-
val libraries = viewModel.licensesState.collectAsState().value
86+
val libraries = viewModel.licensesState.collectAsStateWithLifecycle().value
8687
val listState = rememberLazyListState()
8788

8889
LaunchedEffect(searchState, searchText) {

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/NewsDetailScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.foundation.rememberScrollState
1111
import androidx.compose.foundation.verticalScroll
1212
import androidx.compose.runtime.Composable
1313
import androidx.compose.runtime.collectAsState
14+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1415
import androidx.compose.ui.Modifier
1516
import androidx.compose.ui.unit.dp
1617
import kotlinconfapp.shared.generated.resources.Res
@@ -35,7 +36,7 @@ fun NewsDetailScreen(
3536
onBack: () -> Unit,
3637
viewModel: NewsDetailViewModel = koinViewModel { parametersOf(newsId) }
3738
) {
38-
val state = viewModel.newsItem.collectAsState().value
39+
val state = viewModel.newsItem.collectAsStateWithLifecycle().value
3940

4041
Column(
4142
Modifier

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/NewsListScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.foundation.lazy.items
99
import androidx.compose.foundation.lazy.rememberLazyListState
1010
import androidx.compose.runtime.Composable
1111
import androidx.compose.runtime.collectAsState
12+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1213
import androidx.compose.runtime.getValue
1314
import androidx.compose.ui.Alignment
1415
import androidx.compose.ui.Modifier
@@ -35,7 +36,7 @@ fun NewsListScreen(
3536
title = stringResource(Res.string.news_feed_title),
3637
onBack = onBack,
3738
) {
38-
val news by viewModel.news.collectAsState()
39+
val news by viewModel.news.collectAsStateWithLifecycle()
3940

4041
if (news.isNotEmpty()) {
4142
val listState = rememberLazyListState()

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/ScheduleScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ fun ScheduleScreen(
230230
)
231231
}
232232

233-
val tags by viewModel.filterItems.collectAsState()
233+
val tags by viewModel.filterItems.collectAsStateWithLifecycle()
234234
ScheduleList(
235235
scheduleItems = items,
236236
onSession = onSession,
@@ -373,7 +373,7 @@ private fun Header(
373373
onHeaderStateChange(MainHeaderContainerState.Title)
374374
onSearchQueryChange("")
375375
}
376-
val filterItems by viewModel.filterItems.collectAsState()
376+
val filterItems by viewModel.filterItems.collectAsStateWithLifecycle()
377377

378378
MainHeaderSearchBar(
379379
searchValue = searchQuery,

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SessionScreen.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape
2929
import androidx.compose.runtime.Composable
3030
import androidx.compose.runtime.LaunchedEffect
3131
import androidx.compose.runtime.collectAsState
32+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
3233
import androidx.compose.runtime.getValue
3334
import androidx.compose.runtime.mutableStateOf
3435
import androidx.compose.runtime.remember
@@ -102,10 +103,10 @@ fun SessionScreen(
102103
onWatchVideo: (String) -> Unit,
103104
viewModel: SessionViewModel = koinViewModel { parametersOf(sessionId) }
104105
) {
105-
val session = viewModel.session.collectAsState().value
106-
val speakers = viewModel.speakers.collectAsState().value
107-
val userSignedIn by viewModel.userSignedIn.collectAsState()
108-
val shouldNavigateToPrivacyNotice by viewModel.navigateToPrivacyNotice.collectAsState()
106+
val session = viewModel.session.collectAsStateWithLifecycle().value
107+
val speakers = viewModel.speakers.collectAsStateWithLifecycle().value
108+
val userSignedIn by viewModel.userSignedIn.collectAsStateWithLifecycle()
109+
val shouldNavigateToPrivacyNotice by viewModel.navigateToPrivacyNotice.collectAsStateWithLifecycle()
109110

110111
LaunchedEffect(shouldNavigateToPrivacyNotice) {
111112
if (shouldNavigateToPrivacyNotice) {

shared/src/commonMain/kotlin/org/jetbrains/kotlinconf/screens/SpeakersScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import androidx.compose.foundation.lazy.grid.rememberLazyGridState
1414
import androidx.compose.runtime.Composable
1515
import androidx.compose.runtime.LaunchedEffect
1616
import androidx.compose.runtime.collectAsState
17+
import androidx.lifecycle.compose.collectAsStateWithLifecycle
1718
import androidx.compose.runtime.getValue
1819
import androidx.compose.runtime.mutableStateOf
1920
import androidx.compose.runtime.saveable.rememberSaveable
@@ -59,7 +60,7 @@ fun SpeakersScreen(
5960
var searchState by rememberSaveable { mutableStateOf(MainHeaderContainerState.Title) }
6061
var searchText by rememberSaveable { mutableStateOf("") }
6162

62-
val uiState = viewModel.speakers.collectAsState().value
63+
val uiState = viewModel.speakers.collectAsStateWithLifecycle().value
6364

6465
val gridState = rememberLazyGridState()
6566

0 commit comments

Comments
 (0)