You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.5 KiB
Dart

import 'package:dio/dio.dart';
import '../../core/config.dart';
class IgdbApi {
final Dio _dio;
IgdbApi()
: _dio = Dio(
BaseOptions(
baseUrl: AppConfig.backendBaseUrl,
headers: const {'Accept': 'application/json'},
),
);
Future<List<Map<String, dynamic>>> searchGames(String query,
{int limit = 20, String lang = 'de'}) async {
final res = await _dio.get(
'',
queryParameters: {
'action': 'search',
'query': query,
'limit': limit,
'lang': lang,
'check_external': 1,
},
);
if (res.statusCode != 200) {
throw Exception('IGDB search HTTP ${res.statusCode}');
}
final data = res.data;
if (data is Map && data['results'] is List) {
return (data['results'] as List).cast<Map<String, dynamic>>();
}
throw Exception('IGDB search: unerwartetes Antwortformat');
}
Future<Map<String, dynamic>> getGameDetails(int igdbId, {String lang = 'de'}) async {
final res = await _dio.get(
'',
queryParameters: {
'action': 'details',
'id': igdbId,
'lang': lang,
'check_external': 1,
},
);
if (res.statusCode != 200) {
throw Exception('IGDB details HTTP ${res.statusCode}');
}
final data = res.data;
if (data is Map && data['game'] is Map) {
return (data['game'] as Map).cast<String, dynamic>();
}
throw Exception('IGDB details: unerwartetes Antwortformat');
}
}