summaryrefslogtreecommitdiff
path: root/lib/network/popular_api.dart
blob: bf4098af64c40e38b86d31eda8610fff964bd758 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import 'dart:convert';

import 'package:http/http.dart' as http;
import 'package:pmsna1/database/helper.dart';
import 'package:pmsna1/models/popular.dart';
import 'package:pmsna1/models/popular_detail.dart';

class PopularApi {
  String apiKey = '0cb894064f40656f3575e8ccae3d8d73';
  Uri get popularLink => Uri.parse(
      'https://api.themoviedb.org/3/movie/popular?api_key=$apiKey&language=es-MX&page=1');
  Uri getDetailLink(int id) => Uri.parse(
        'https://api.themoviedb.org/3/movie/$id?api_key=$apiKey&language=es-MX&page=1&append_to_response=videos,credits',
      );

  Future<List<Popular>?> getAllPopular() async {
    http.Response result = await http.get(popularLink);
    var list = jsonDecode(result.body)['results'] as List;
    if (result.statusCode != 200) {
      return null;
    }
    List<Popular> favorites = await DatabaseHelper().getAllFavorites();
    return list.map((p) {
      Popular popular = Popular.fromMap(p);
      if (favorites.where((f) => f.id == popular.id).isNotEmpty) {
        popular.hasFavorite = true;
      }
      return popular;
    }).toList();
  }

  Future<PopularDetail?> getPopularDetail(int id) async {
    http.Response result = await http.get(getDetailLink(id));
    var map = jsonDecode(result.body) as Map<String, dynamic>;
    if (result.statusCode != 200) {
      return null;
    }
    PopularDetail detail = PopularDetail.fromMap(map);
    detail.hasFavorite = await DatabaseHelper().hasFavorite(detail.id!);
    return detail;
  }
}