Skip to content

Instantly share code, notes, and snippets.

@MostafaGad1911
Created May 5, 2023 21:07
Show Gist options
  • Save MostafaGad1911/368ca1e6e191c6acee2d960f90bc677c to your computer and use it in GitHub Desktop.
Save MostafaGad1911/368ca1e6e191c6acee2d960f90bc677c to your computer and use it in GitHub Desktop.
Convert Paged Data To List
package mostafazsc.projects.exts
import androidx.paging.PagingData
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.single
@Suppress("UNCHECKED_CAST")
suspend fun <T : Any> PagingData<T>.toList(): List<T> {
val flow = PagingData::class.java.getDeclaredField("flow").apply {
isAccessible = true
}.get(this) as Flow<Any?>
val pageEventInsert = flow.single()
val pageEventInsertClass = Class.forName("androidx.paging.PageEvent\$Insert")
val pagesField = pageEventInsertClass.getDeclaredField("pages").apply {
isAccessible = true
}
val pages = pagesField.get(pageEventInsert) as List<Any?>
val transformablePageDataField =
Class.forName("androidx.paging.TransformablePage").getDeclaredField("data").apply {
isAccessible = true
}
val listItems =
pages.flatMap { transformablePageDataField.get(it) as List<*> }
return listItems as List<T>
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment