Чтобы реализовать эту функцию, я подумал о добавлении нового PagingSource PostByTagPagingSource, который вызывает getPostByTagUseCase.invoke(postId, nextPage)), когда пользователь пытается выполнить поиск по тегу , измените uiState на вновь созданный Pager, который использует другой PagingSuurce.
В настоящее время существующий код:
Модель просмотра
Код: Выделить всё
@HiltViewModel
class PostViewModel @Inject constructor(
postUseCase: GetPostUseCase) : ViewModel() {
var uiState: Flow
> =
Pager(
config = PagingConfig(
pageSize = ITEMS_PER_PAGE,
enablePlaceholders = true
),
pagingSourceFactory = {
PostPagingSource(
postUseCase // postUseCase call getPostUseCase.invoke(nextPage)
)
}
).flow.cachedIn(viewModelScope)
}
Код: Выделить всё
val lazyPagingPosts = viewModel.uiState.collectAsLazyPagingItems()
Код: Выделить всё
@HiltViewModel
class PostViewModel @Inject constructor(
postUseCase: GetPostUseCase, private val postByTagUseCase : GetPostByTagUseCase
) : ViewModel() {
var uiState: Flow
> =
Pager(
config = PagingConfig(
pageSize = ITEMS_PER_PAGE,
enablePlaceholders = true
),
pagingSourceFactory = {
PostPagingSource(
postUseCase
)
}
).flow.cachedIn(viewModelScope)
fun getPostByTag(tagId : String) {
uiState = Pager(
config = PagingConfig(
pageSize = ITEMS_PER_PAGE,
enablePlaceholders = true
),
pagingSourceFactory = {
PostByTagPagingSource(postByTagUseCase, tagId)
}
).flow.cachedIn(viewModelScope)
}
}
Код: Выделить всё
TagEditableUserInput(
hint = "Choose tag",
caption = "To",
vectorImageId = R.drawable.search,
onInputChanged = {
viewModel.getPostByTag(it)
}
)
Эта реализация проекта работает, но после прокрутки это не так.
Подробнее здесь: https://stackoverflow.com/questions/786 ... th-compose