Hi, I'm trying to load the second page on my app, but for some reason it keeps showing results from page 1. When I press the button 'load more' it should grab the second page movies, but it doesn't. Any idea's? It's in swiftUI btw.
Button code:
Button(action: {
movieListState.fetchNextPage(from: endpoint)
}) {
Text("Load More")
.font(.headline)
.foregroundColor(.blue)
.padding()
.background(Color.gray.opacity(0.1))
.cornerRadius(10)
}
Handeling code:
class MovieListState: ObservableObject {
@Published var movies: [Movie] = []
@Published var isLoading: Bool = false
@Published var error: MovieError?
private let movieService: MovieService
private var currentPage: Int = 1
init(movieService: MovieService = MovieStore.shared) {
self.movieService = movieService
}
func loadMovies(from endpoint: MovieListEndpoint, page: Int) {
self.isLoading = true
self.movieService.fetchMovies(from: endpoint, page: page) { [weak self] (result) in
guard let self = self else { return }
self.isLoading = false
switch result {
case .success(let response):
self.movies = response.results
case .failure(let error):
self.error = error
}
}
}
func fetchNextPage(from endpoint: MovieListEndpoint) {
guard !isLoading else { return }
let nextPage = currentPage + 1
loadMovies(from: endpoint, page: nextPage)
currentPage = nextPage
}
}
Api call:
func fetchMovies(from endpoint: MovieListEndpoint, page: Int, completion: @escaping (Result<MovieResponse, MovieError>) -> ()) {
guard let url = URL(string: "\(baseAPIURL)/movie/\(endpoint.rawValue)?api_key=\(apiKey)&page=\(page)&include_adult=false&watch_region=NL") else {
completion(.failure(.invalidEndpoint))
return
}
self.loadURLAndDecode(url: url, completion: completion)
print(url)
}
Can't find a movie or TV show? Login to create it.
Want to rate or add this item to a list?
Not a member?