Skip to content
This repository was archived by the owner on Jul 16, 2024. It is now read-only.

Commit 659f5e5

Browse files
committed
Move VM initialization into Composable
1 parent b5ca9de commit 659f5e5

File tree

3 files changed

+15
-18
lines changed

3 files changed

+15
-18
lines changed

biz/detail/src/main/kotlin/io/goooler/demoapp/detail/ui/DetailPage.kt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import androidx.compose.material3.Icon
2525
import androidx.compose.material3.MaterialTheme
2626
import androidx.compose.material3.Text
2727
import androidx.compose.runtime.Composable
28+
import androidx.compose.runtime.collectAsState
2829
import androidx.compose.runtime.getValue
2930
import androidx.compose.runtime.mutableStateOf
3031
import androidx.compose.runtime.remember
@@ -33,24 +34,26 @@ import androidx.compose.ui.Alignment
3334
import androidx.compose.ui.Modifier
3435
import androidx.compose.ui.tooling.preview.Preview
3536
import androidx.compose.ui.unit.dp
37+
import androidx.lifecycle.viewmodel.compose.viewModel
3638
import io.goooler.demoapp.common.util.getQuantityString
3739
import io.goooler.demoapp.common.util.showToast
3840
import io.goooler.demoapp.detail.R
3941
import io.goooler.demoapp.detail.model.RepoDetailModel
42+
import io.goooler.demoapp.detail.vm.DetailViewModel
4043

4144
@OptIn(ExperimentalMaterialApi::class)
4245
@Composable
4346
fun DetailPageWithSwipeRefresh(
44-
isRefreshing: Boolean,
45-
onRefresh: () -> Unit,
46-
model: RepoDetailModel,
4747
modifier: Modifier = Modifier,
48-
onForkClick: () -> Unit,
4948
) {
50-
val refreshState = rememberPullRefreshState(refreshing = isRefreshing, onRefresh = onRefresh)
49+
val vm: DetailViewModel = viewModel()
50+
val model by vm.repoDetailModel.collectAsState()
51+
val isRefreshing by vm.isRefreshing.collectAsState()
52+
53+
val refreshState = rememberPullRefreshState(refreshing = isRefreshing, onRefresh = vm::refresh)
5154

52-
Box(modifier = Modifier.pullRefresh(state = refreshState)) {
53-
DetailPage(model = model, onForkClick = onForkClick)
55+
Box(modifier = modifier.pullRefresh(state = refreshState)) {
56+
DetailPage(model = model, onForkClick = vm::fork)
5457
PullRefreshIndicator(isRefreshing, refreshState, Modifier.align(Alignment.TopCenter))
5558
}
5659
}

biz/detail/src/main/kotlin/io/goooler/demoapp/detail/ui/RepoDetailActivity.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import android.os.Bundle
44
import androidx.activity.compose.setContent
55
import androidx.activity.viewModels
66
import androidx.compose.foundation.layout.padding
7-
import androidx.compose.runtime.collectAsState
8-
import androidx.compose.runtime.getValue
97
import androidx.compose.ui.Modifier
108
import io.goooler.demoapp.base.core.BaseActivity
119
import io.goooler.demoapp.detail.vm.DetailViewModel
@@ -21,15 +19,9 @@ class RepoDetailActivity : BaseActivity() {
2119
vm.refresh()
2220

2321
setContent {
24-
val model by vm.repoDetailModel.collectAsState()
25-
val isRefreshing by vm.isRefreshing.collectAsState()
2622
DemoScaffold { innerPadding ->
2723
DetailPageWithSwipeRefresh(
2824
modifier = Modifier.padding(innerPadding),
29-
isRefreshing = isRefreshing,
30-
onRefresh = vm::refresh,
31-
model = model,
32-
onForkClick = vm::fork,
3325
)
3426
}
3527
}

gradle/libs.versions.toml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ androidX-coordinatorLayout = "androidx.coordinatorlayout:coordinatorlayout:1.2.0
5353
androidX-core = "androidx.core:core-ktx:1.12.0"
5454
androidX-fragment = "androidx.fragment:fragment-ktx:1.6.2"
5555
androidX-lifecycle-service = { module = "androidx.lifecycle:lifecycle-service", version.ref = "androidX-lifecycle" }
56-
androidX-lifecycle-viewModel = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidX-lifecycle" }
56+
androidX-lifecycle-viewModel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidX-lifecycle" }
57+
androidX-lifecycle-viewModel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidX-lifecycle" }
5758
androidX-paging = "androidx.paging:paging-runtime:3.2.1"
5859
androidX-recyclerView = "androidx.recyclerview:recyclerview:1.3.2"
5960
androidX-room-compiler = { module = "androidx.room:room-compiler", version.ref = "androidX-room" }
@@ -102,10 +103,11 @@ androidX-compose = [
102103
"androidX-compose-material3",
103104
"androidX-compose-foundation",
104105
"androidX-compose-icons-core",
105-
"androidX-compose-icons-extended"
106+
"androidX-compose-icons-extended",
107+
"androidX-lifecycle-viewModel-compose",
106108
]
107109
androidX-lifecycle = [
108-
"androidX-lifecycle-viewModel",
110+
"androidX-lifecycle-viewModel-ktx",
109111
"androidX-lifecycle-service"
110112
]
111113
androidX-room = [

0 commit comments

Comments
 (0)