requestMediaWithKeyword method

Future<PixabayResponse> requestMediaWithKeyword ({MediaType media, String keyword, int resultsPerPage: 30, int page, String category })

main request method for all kind of media

Implementation

Future<PixabayResponse> requestMediaWithKeyword(
    {MediaType media,
    String keyword,
    int resultsPerPage = 30,
    int page,
    String category}) async {
  // Search for media associated with the keyword
  String url = "https://pixabay.com/api/";
  PixabayResponse res;

  if (media == MediaType.video) url += "videos/";

  if (resultsPerPage < 3) // API restriction
    resultsPerPage = 3;

  url += "?key=" + apiKey;

  if (keyword != null) url += "&q=" + Uri.encodeFull(keyword);

  url +=
      "&lang=" + Uri.encodeFull(this.language) + "&per_page=$resultsPerPage";

  if (category != null) url += "&category=$category";
  if (page != null) url += "&page=$page";

  if (media == MediaType.video) {
    var data = await getVideos(url);

    if (data != null && data.length > 0) {
      List<PixabayVideo> videos =
          new List<PixabayVideo>.generate(data['hits'].length, (index) {
        return new PixabayVideo.fromJson(data['hits'][index]);
      });

      res = PixabayResponse(
          total: data["total"], totalHits: data["totalHits"], hits: videos);
    }
  } else {
    var data = await getImages(url);

    if (data != null && data.length > 0) {
      List<PixabayImage> images =
          new List<PixabayImage>.generate(data['hits'].length, (index) {
        return new PixabayImage.fromJson(data['hits'][index]);
      });

      res = PixabayResponse(
          total: data["total"], totalHits: data["totalHits"], hits: images);
    }
  }
  return res;
}