import 'package:dio/dio.dart'; import 'package:http_parser/http_parser.dart'; import 'dart:typed_data'; import 'dart:convert'; import '../../resources/api_constants.dart'; import '../LogoutService/Logoutservice.dart'; class ApiService { final String baseUrl = ApiConstants.baseUrl; final Dio dio = Dio(); Future>> getEntities(String token) async { try { dio.options.headers['Authorization'] = 'Bearer $token'; final response = await dio.get('$baseUrl/Bookmarks/Bookmarks'); if (response.statusCode == 401) { LogoutService.logout(); } final entities = (response.data as List).cast>(); return entities; } catch (e) { throw Exception('Failed to get all entities: $e'); } } Future createEntity( String token, Map fData, dynamic selectedFile) async { try { String apiUrl = "$baseUrl/Bookmarks/Bookmarks"; final Uint8List fileBytes = selectedFile.bytes!; final mimeType = lookupMimeType(selectedFile.name!); FormData formData = FormData.fromMap({ 'file': MultipartFile.fromBytes( fileBytes, filename: selectedFile.name!, contentType: MediaType.parse(mimeType!), ), 'data': jsonEncode( fData), // Convert the map to JSON and include it as a parameter }); Dio dio = Dio(); // Create a new Dio instance dio.options.headers['Authorization'] = 'Bearer $token'; final response = await dio.post(apiUrl, data: formData); if (response.statusCode == 401) { LogoutService.logout(); } if (response.statusCode == 200) { // Handle successful response print('File uploaded successfully'); } else { print('Failed to upload file with status: ${response.statusCode}'); } } catch (error) { print('Error occurred during form submission: $error'); } } String lookupMimeType(String filePath) { final ext = filePath.split('.').last; switch (ext) { case 'jpg': case 'jpeg': return 'image/jpeg'; case 'png': return 'image/png'; case 'pdf': return 'application/pdf'; // Add more cases for other file types as needed default: return 'application/octet-stream'; // Default MIME type } } Future updateEntity( String token, int entityId, Map entity) async { try { dio.options.headers['Authorization'] = 'Bearer $token'; var response = await dio.put('$baseUrl/Bookmarks/Bookmarks/$entityId', data: entity); if (response.statusCode == 401) { LogoutService.logout(); } print(entity); } catch (e) { throw Exception('Failed to update entity: $e'); } } Future deleteEntity(String token, int entityId) async { try { dio.options.headers['Authorization'] = 'Bearer $token'; var response = await dio.delete('$baseUrl/Bookmarks/Bookmarks/$entityId'); if (response.statusCode == 401) { LogoutService.logout(); } } catch (e) { throw Exception('Failed to delete entity: $e'); } } }