Skip to content

Instantly share code, notes, and snippets.

@rafaelqueiroz88
Created February 19, 2025 14:15
Show Gist options
  • Save rafaelqueiroz88/f9bc690b394cd96e0f2db243c93800b8 to your computer and use it in GitHub Desktop.
Save rafaelqueiroz88/f9bc690b394cd96e0f2db243c93800b8 to your computer and use it in GitHub Desktop.
Generic Request
import 'dart:convert';
import 'package:http/http.dart' as http;
abstract class BaseService {
static const String baseUrl = 'http://some-supercool-api-address:s0m3-p0rt';
final String endpoint;
late final Map<String, dynamic> response;
BaseService({required this.endpoint});
Future<T> request<T>(
String method, {
Map<String, dynamic>? body,
Map<String, String>? headers,
}) async {
final String url = '$baseUrl/$endpoint';
final Uri uri = Uri.parse(url);
try {
late http.Response response;
final Map<String, String> defaultHeaders = {
'Content-Type': 'application/json',
...?headers,
};
switch (method.toUpperCase()) {
case 'GET':
response = await http.get(uri, headers: defaultHeaders);
break;
case 'POST':
response = await http.post(
uri,
headers: defaultHeaders,
body: jsonEncode(body),
);
break;
case 'PUT':
response = await http.put(
uri,
headers: defaultHeaders,
body: jsonEncode(body),
);
break;
case 'DELETE':
response = await http.delete(uri, headers: defaultHeaders);
break;
default:
throw Exception('Método HTTP não suportado: $method');
}
if (response.statusCode >= 200 && response.statusCode < 300) {
return json.decode(response.body) as T;
} else {
throw Exception('Erro ${response.statusCode}: ${response.body}');
}
} catch (error) {
throw Exception('Erro na requisição: $error');
}
}
}
// Then require like this
Future<List<MyModel>> all() async {
final List<dynamic> response = await request<List<dynamic>>('GET');
return response.map((model) => MyModel.fromJson(model)).toList();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment