HopSpotFrontend/lib/api/backend_api.dart

65 lines
2.0 KiB
Dart

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<http.Response> authHttpRequest({
required BuildContext context,
required String url,
String method = 'GET',
Map<String, String>? headers,
dynamic body,
}) async {
final authService = Provider.of<AuthService>(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();
}
}