39 lines
1.3 KiB
Dart
39 lines
1.3 KiB
Dart
|
import 'package:dio/dio.dart';
|
||
|
import 'package:mobile_app/domain/models/card.dart';
|
||
|
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||
|
import 'api_interface.dart';
|
||
|
|
||
|
class CocktailRepository extends ApiInterface {
|
||
|
static final Dio _dio = Dio()
|
||
|
..interceptors.add(PrettyDioLogger(
|
||
|
requestHeader: true,
|
||
|
requestBody: true,
|
||
|
));
|
||
|
|
||
|
static const String _baseUrl = 'https://www.thecocktaildb.com/api/json/v1/1';
|
||
|
|
||
|
@override
|
||
|
Future<List<CardData>?> loadData(String? q) async {
|
||
|
try {
|
||
|
final String url = q != null
|
||
|
? '$_baseUrl/search.php?s=$q' // Поиск по названию
|
||
|
: '$_baseUrl/filter.php?c=Cocktail'; // Получение списка коктейлей по категории
|
||
|
|
||
|
final Response<dynamic> response = await _dio.get<Map<dynamic, dynamic>>(url);
|
||
|
|
||
|
if (response.data != null && response.data['drinks'] != null) {
|
||
|
final List<CardData> data = (response.data['drinks'] as List).map((drink) {
|
||
|
return CardData(
|
||
|
drink['strDrink'], // Название коктейля
|
||
|
coctailId: drink['idDrink'], // ID коктейля
|
||
|
coctailImage: drink['strDrinkThumb'],
|
||
|
);
|
||
|
}).toList();
|
||
|
return data;
|
||
|
}
|
||
|
return null;
|
||
|
} on DioException catch (e) {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
}
|