add some compose caching

This commit is contained in:
Owen LeJeune
2023-06-29 10:56:12 -04:00
parent 272f7ce4ff
commit 257d60d404
3 changed files with 29 additions and 7 deletions

View File

@@ -12,15 +12,17 @@ import androidx.paging.compose.LazyPagingItems
fun <T: Any> LazyGridScope.lazyPagingItems(
lazyPagingItems: LazyPagingItems<T>,
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 <T: Any> LazyGridScope.listItems(
items: List<T>,
key: (T?) -> Any,
itemContent: @Composable (value: T) -> Unit
) {
items(items.size) { index ->
@@ -41,6 +43,7 @@ fun LazyGridScope.header(
fun <T: Any> LazyListScope.listItems(
items: Collection<T>,
key: (T?) -> Any,
itemContent: @Composable (value: T) -> Unit
) {
items(items.size) { index ->
@@ -60,6 +63,7 @@ fun <T: Any?> LazyListScope.listItems(
fun <T: Any> LazyListScope.lazyPagingItems(
lazyPagingItems: LazyPagingItems<T>,
key: ((index: Int) -> Any)? = null,
itemContent: @Composable LazyItemScope.(value: T?) -> Unit
) {
items(lazyPagingItems.itemCount) { index ->

View File

@@ -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),

View File

@@ -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 -> {