import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:pvt15/services/auth/auth_client.dart'; import 'package:pvt15/services/auth/auth_service.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; Future authHttpRequest({ required BuildContext context, required String url, String method = 'GET', Map? headers, dynamic body, }) async { final authService = Provider.of(context, listen: false); final authClient = AuthClient(authService: authService); // Sätt Content-Type till application/json som standard, men låt anropet skriva över det final defaultHeaders = {'Content-Type': 'application/json'}; final mergedHeaders = {...defaultHeaders, if (headers != null) ...headers}; try { Uri uri = Uri.parse(url); http.Response response; switch (method.toUpperCase()) { case 'GET': response = await authClient.client.get(uri, headers: mergedHeaders); break; case 'POST': response = await authClient.client.post( uri, headers: mergedHeaders, body: body != null ? json.encode(body) : null, ); break; case 'PATCH': response = await authClient.client.patch( uri, headers: mergedHeaders, body: body != null ? json.encode(body) : null, ); break; case 'PUT': response = await authClient.client.put( uri, headers: mergedHeaders, body: body != null ? json.encode(body) : null, ); break; case 'DELETE': response = await authClient.client.delete(uri, headers: mergedHeaders); break; default: throw UnsupportedError('HTTP-metoden $method stöds inte.'); } return response; } catch (error) { print('Fel vid $method-anrop: $error'); return http.Response('Fel vid anrop: $error', 500); } finally { authClient.close(); } }