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
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');
|
|
}
|
|
}
|