import 'dart:convert'; import 'dart:io'; import 'package:dio/dio.dart'; abstract class BaseRepository { final Dio dio; BaseRepository({required this.dio}); // POST audio Future> postAudio({ required String filePath, required String service, String? token, }) async { try { FormData formData = FormData.fromMap({ "audio": await MultipartFile.fromFile(filePath, filename: "rekaman.mp3"), }); final response = await dio.post( // Constant.baseUrl + service, service, data: formData, options: Options( headers: token != null ? { HttpHeaders.contentTypeHeader: "multipart/form-data", HttpHeaders.authorizationHeader: "Bearer $token", } : { HttpHeaders.authorizationHeader: "Bearer $token" }, contentType: "application/json", ), ); if (response.statusCode != 200) { throw BaseRepositoryException( message: "Invalid Http Response ${response.statusCode}", ); } Map jsonData = jsonDecode(response.data); if (jsonData["status"] != "OK") { throw BaseRepositoryException( message: jsonData["message"], ); } else { return jsonData; } } on DioException catch (e) { throw BaseRepositoryException(message: e.message ?? ""); } on SocketException catch (e) { throw BaseRepositoryException(message: e.message); } on BaseRepositoryException catch (e) { throw BaseRepositoryException(message: e.message); } } // POST PAKE ContentType JSON Future> post({ required Map param, required String service, String? token, }) async { try { final response = await dio.post( // Constant.baseUrl + service, service, data: jsonEncode(param), options: Options( headers: token != null ? { HttpHeaders.contentTypeHeader: "application/json", HttpHeaders.authorizationHeader: "Bearer $token", } : { HttpHeaders.contentTypeHeader: "application/json", }, contentType: "application/json", ), ); if (response.statusCode != 200) { throw BaseRepositoryException( message: "Invalid Http Response ${response.statusCode}", ); } Map jsonData = jsonDecode(response.data); if (jsonData["status"] != "OK") { throw BaseRepositoryException( message: jsonData["message"], ); } else { return jsonData; } } on DioException catch (e) { throw BaseRepositoryException(message: e.message ?? ""); } on SocketException catch (e) { throw BaseRepositoryException(message: e.message); } on BaseRepositoryException catch (e) { throw BaseRepositoryException(message: e.message); } } // GET Pake Content Type JSON Future> get({ // required Map param, required String service, String? token, }) async { try { final response = await dio.get( // Constant.baseUrl + service, service, // data: jsonEncode(param), options: Options( headers: token != null ? { HttpHeaders.contentTypeHeader: "application/json", HttpHeaders.authorizationHeader: "Bearer $token", } : { HttpHeaders.contentTypeHeader: "application/json", }, contentType: "application/json", ), ); if (response.statusCode != 200) { throw BaseRepositoryException( message: "Invalid Http Response ${response.statusCode}", ); } Map jsonData = jsonDecode(response.data); if (jsonData["status"] != "OK") { throw BaseRepositoryException( message: jsonData["message"], ); } else { return jsonData; } } on DioException catch (e) { throw BaseRepositoryException(message: e.message ?? ""); } on SocketException catch (e) { throw BaseRepositoryException(message: e.message); } on BaseRepositoryException catch (e) { throw BaseRepositoryException(message: e.message); } } } class BaseRepositoryException implements Exception { final String message; BaseRepositoryException({ required this.message, }); }