Skip to content

Commit db58cd1

Browse files
DatingApp fixed minor bug (#113)
* Gradle updated to 7.1.0-alpha11 * Fixed concurrent exception after setting mutableState in DatingHomeScreen.kt
1 parent 1116b5a commit db58cd1

File tree

7 files changed

+41
-11
lines changed

7 files changed

+41
-11
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.guru.composecookbook.ui.utils
2+
3+
fun Boolean?.orFalse(): Boolean = this ?: false

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ buildscript {
55
jcenter()
66
}
77
dependencies {
8-
classpath("com.android.tools.build:gradle:7.1.0-alpha07")
8+
classpath("com.android.tools.build:gradle:7.1.0-alpha11")
99
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21")
1010
}
1111
}

buildSrc/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ dependencies {
3636
implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21")
3737

3838
// in order to recognize the "plugins" block in the common script
39-
implementation("com.android.tools.build:gradle:7.1.0-alpha07")
39+
implementation("com.android.tools.build:gradle:7.1.0-alpha11")
4040

4141
// in order to recognize the "android" block in the common script
42-
implementation("com.android.tools.build:gradle-api:7.1.0-alpha07")
42+
implementation("com.android.tools.build:gradle-api:7.1.0-alpha11")
4343
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.guru.composecookbook.datingapp
2+
3+
import androidx.lifecycle.LiveData
4+
import androidx.lifecycle.MutableLiveData
5+
import androidx.lifecycle.ViewModel
6+
import com.guru.composecookbook.data.AlbumsDataProvider
7+
import com.guru.composecookbook.data.model.Album
8+
9+
class DatingHomeViewModel : ViewModel() {
10+
private val _albumLiveData = MutableLiveData<MutableList<Album>>()
11+
val albumLiveData: LiveData<MutableList<Album>> = _albumLiveData
12+
13+
init {
14+
getAlbums()
15+
}
16+
17+
private fun getAlbums(){
18+
_albumLiveData.value = AlbumsDataProvider.albums.take(15).toMutableList()
19+
}
20+
}

demos/datingapp/src/main/java/com/guru/composecookbook/datingapp/components/home/DatingHomeScreen.kt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.material.icons.filled.Cancel
1111
import androidx.compose.material.icons.filled.Favorite
1212
import androidx.compose.material.icons.outlined.Place
1313
import androidx.compose.runtime.Composable
14+
import androidx.compose.runtime.livedata.observeAsState
1415
import androidx.compose.runtime.mutableStateOf
1516
import androidx.compose.runtime.remember
1617
import androidx.compose.ui.Alignment
@@ -23,24 +24,27 @@ import androidx.compose.ui.platform.LocalConfiguration
2324
import androidx.compose.ui.res.painterResource
2425
import androidx.compose.ui.text.style.TextAlign
2526
import androidx.compose.ui.unit.dp
27+
import androidx.lifecycle.viewmodel.compose.viewModel
2628
import com.guru.composecookbook.canvas.MultiStateAnimationCircleFilledCanvas
27-
import com.guru.composecookbook.data.AlbumsDataProvider
2829
import com.guru.composecookbook.data.R
2930
import com.guru.composecookbook.data.model.Album
31+
import com.guru.composecookbook.datingapp.DatingHomeViewModel
32+
import com.guru.composecookbook.datingapp.util.orFalse
3033
import com.guru.composecookbook.theme.modifiers.verticalGradientBackground
3134
import com.guru.composecookbook.theme.purple
3235
import com.guru.composecookbook.theme.typography
3336
import kotlin.random.Random
3437

3538
@Composable
3639
fun DatingHomeScreen() {
40+
val viewModel: DatingHomeViewModel = viewModel()
41+
val persons = viewModel.albumLiveData.observeAsState()
42+
3743
val configuration = LocalConfiguration.current
3844
val screenHeight = configuration.screenHeightDp.dp
3945
val cardHeight = screenHeight - 200.dp
4046

4147
Surface(modifier = Modifier.fillMaxSize()) {
42-
val persons = mutableListOf<Album>()
43-
persons.addAll(AlbumsDataProvider.albums.take(15))
4448
val boxModifier = Modifier
4549

4650
Box(
@@ -53,7 +57,7 @@ fun DatingHomeScreen() {
5357
) {
5458
val listEmpty = remember { mutableStateOf(false) }
5559
DatingLoader(modifier = boxModifier)
56-
persons.forEachIndexed { index, album ->
60+
persons.value?.forEachIndexed { index, album ->
5761
DraggableCard(
5862
item = album,
5963
modifier = Modifier
@@ -66,9 +70,9 @@ fun DatingHomeScreen() {
6670
end = 16.dp
6771
),
6872
onSwiped = { _, swipedAlbum ->
69-
if (persons.isNotEmpty()) {
70-
persons.remove(swipedAlbum)
71-
if (persons.isEmpty()) {
73+
if (persons.value?.isNotEmpty().orFalse()) {
74+
persons.value?.remove(swipedAlbum)
75+
if (persons.value?.isEmpty().orFalse()) {
7276
listEmpty.value = true
7377
}
7478
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.guru.composecookbook.datingapp.util
2+
3+
fun Boolean?.orFalse(): Boolean = this ?: false
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Sat Jan 30 00:00:22 SGT 2021
22
distributionBase=GRADLE_USER_HOME
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-all.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
44
distributionPath=wrapper/dists
55
zipStorePath=wrapper/dists
66
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)