65 lines
2.0 KiB
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();
|
|
}
|
|
} |