fetchGames function

Future<GamesResponse> fetchGames(
  1. int limit,
  2. int offset,
  3. String cachekey,
  4. Config config,
)

Pass cacheKey = "no-cache" to ignore caching

Implementation

Future<GamesResponse> fetchGames(
    int limit, int offset, String cachekey, Config config) async {
  String path =
      '${config.server}/api/tenant/${config.operatorId}/active-games?filter[application]=${config.application}&orderBy=${config.orderBy}&limit=${limit > 0 ? limit : config.limit}&offset=${offset > 0 ? offset : config.offset}&cachekey=$cachekey';
  if (cachekey != "no-cache") {
    try {
      var file = await GameoliveCacheManager.instance
          .getSingleFile(path, headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
        'Authorization': 'Bearer ${config.token}',
      });
      if (await file.exists()) {
        var res = await file.readAsString();

        GamesResponse games = GamesResponse.fromJson(json.decode(res));
        // REF_GAMES = games;
        return games;
      }
    } catch (ex) {
      if (kDebugMode) {
        print(
            "Seems like, there is some trouble with app caching, so fetching from server (a bit unoptimized)");
      }
    }
  }
  final response = await http.get(Uri.parse(path), headers: <String, String>{
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ${config.token}',
  });

  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    var rb = response.body;

    // store json data into list
    var gameResponse = json.decode(rb) as Map<String, dynamic>;

    // iterate over the list and map each object in list to Img by calling Img.fromJson
    GamesResponse games = GamesResponse.fromJson(
        gameResponse); // list.map((i)=>Game.fromJson(i)).toList();

    // print(games.runtimeType); //returns List<Img>
    // print(games[0].runtimeType); //returns Img
    // REF_GAMES = games;
    return games;
  } else {
    // If the server did not return a 200 OK response,
    // then throw an exception.
    throw Exception('Failed to load games');
  }
}