import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:veloe_kemono_party_flutter/models/creator.dart'; import 'package:veloe_kemono_party_flutter/models/post.dart'; class KemonoClient { final Dio _dio = Dio(BaseOptions(baseUrl: 'https://kemono.su/')); Future> getCreators() async { try { final response = await _dio.get('/api/v1/creators.txt'); if (response.statusCode != 200) { throw DioException( requestOptions: response.requestOptions, response: response, error: 'Unexpected status code: ${response.statusCode}' ); } final parsedData = switch(response.data) { String s => jsonDecode(s), List list => list, Map map => [map], _ => throw FormatException('Unprocessable data') }; return (parsedData as List).map((x) => Creator.fromJson(x)).toList(); } on DioException catch (e) { throw Exception('Network error: ${e.message}'); } on FormatException catch (e) { throw Exception('Data format error: ${e.message}'); } } Future> getPosts(String creatorId, String service, int start, String query) async { try { final response = await _dio.get( '/api/v1/$service/user/$creatorId', queryParameters: query.isEmpty ? {'o': start} : {'o':start, 'q': query}, ); final parsedData = switch(response.data) { String s => jsonDecode(s), List list => list, Map map => [map], _ => throw FormatException('Unprocessable data') }; return (parsedData as List).map((x) => Post.fromJson(x)).toList(); } on DioException catch (e) { throw Exception('Posts load failed: ${e.message}'); } on Exception { throw Exception('Oops something go wrong}'); } } }