diff --git a/app/src/main/java/com/owenlejeune/tvtime/extensions/ComposeExtensions.kt b/app/src/main/java/com/owenlejeune/tvtime/extensions/ComposeExtensions.kt index c727a43..cb77860 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/extensions/ComposeExtensions.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/extensions/ComposeExtensions.kt @@ -12,15 +12,17 @@ import androidx.paging.compose.LazyPagingItems fun LazyGridScope.lazyPagingItems( lazyPagingItems: LazyPagingItems, + key: ((index: Int) -> Any)? = null, itemContent: @Composable LazyGridItemScope.(value: T?) -> Unit ) { - items(lazyPagingItems.itemCount) { index -> + items(lazyPagingItems.itemCount, key = key) { index -> itemContent(lazyPagingItems[index]) } } fun LazyGridScope.listItems( items: List, + key: (T?) -> Any, itemContent: @Composable (value: T) -> Unit ) { items(items.size) { index -> @@ -41,6 +43,7 @@ fun LazyGridScope.header( fun LazyListScope.listItems( items: Collection, + key: (T?) -> Any, itemContent: @Composable (value: T) -> Unit ) { items(items.size) { index -> @@ -60,6 +63,7 @@ fun LazyListScope.listItems( fun LazyListScope.lazyPagingItems( lazyPagingItems: LazyPagingItems, + key: ((index: Int) -> Any)? = null, itemContent: @Composable LazyItemScope.(value: T?) -> Unit ) { items(lazyPagingItems.itemCount) { index -> diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt index 04afa56..a03bb6d 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Posters.kt @@ -66,7 +66,10 @@ fun PagingPosterGrid( contentPadding = PaddingValues(8.dp), horizontalArrangement = Arrangement.SpaceBetween ) { - lazyPagingItems(lazyPagingItems) { item -> + lazyPagingItems( + lazyPagingItems = lazyPagingItems, + key = { i -> it[i]!!.id } + ) { item -> item?.let { PosterItem( modifier = Modifier.padding(5.dp), @@ -102,7 +105,10 @@ fun PagingPeoplePosterGrid( header() } - lazyPagingItems(lazyPagingItems) { person -> + lazyPagingItems( + lazyPagingItems = lazyPagingItems, + key = { i -> it[i]!!.id } + ) { person -> person?.let { PosterItem( url = TmdbUtils.getFullPersonImagePath(person.profilePath), diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt index cc1d668..bf6977a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt @@ -170,7 +170,10 @@ private fun MovieResultsView( verticalArrangement = Arrangement.spacedBy(12.dp) ) { handleLoadState(context, pagingItems.loadState.refresh) - lazyPagingItems(pagingItems) { item -> + lazyPagingItems( + lazyPagingItems = pagingItems, + key = { i -> pagingItems[i]!!.id } + ) { item -> item?.let { MovieSearchResultView( appNavController = appNavController, @@ -213,7 +216,10 @@ private fun TvResultsView( verticalArrangement = Arrangement.spacedBy(12.dp) ) { handleLoadState(context, pagingItems.loadState.refresh) - lazyPagingItems(pagingItems) { item -> + lazyPagingItems( + lazyPagingItems = pagingItems, + key = { i -> pagingItems[i]!!.id } + ) { item -> item?.let { TvSearchResultView( appNavController = appNavController, @@ -256,7 +262,10 @@ private fun PeopleResultsView( verticalArrangement = Arrangement.spacedBy(12.dp) ) { handleLoadState(context, pagingItems.loadState.refresh) - lazyPagingItems(pagingItems) { item -> + lazyPagingItems( + lazyPagingItems = pagingItems, + key = { i -> pagingItems[i]!!.id } + ) { item -> item?.let { PeopleSearchResultView( appNavController = appNavController, @@ -299,7 +308,10 @@ private fun MultiResultsView( verticalArrangement = Arrangement.spacedBy(12.dp) ) { handleLoadState(context, pagingItems.loadState.refresh) - lazyPagingItems(pagingItems) { item -> + lazyPagingItems( + lazyPagingItems = pagingItems, + key = { i -> pagingItems[i]!!.id } + ) { item -> item?.let { when (item.mediaType) { MediaViewType.MOVIE -> {