Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Importa bibliotecas
- import 'dart:async';
- import 'dart:convert';
- import 'package:path/path.dart';
- import '../models/dog.dart';
- import 'package:http/http.dart' as http;
- class ApiClient {
- // URL da API que será utilizada.
- String _url = "https://5fb5817d36e2fa00166a462d.mockapi.io";
- // Método responsável por inserir um novo objeto na API.
- Future<Dog> insertDog(Dog dog) async {
- // Envia dados via post e obtem como retorno o objeto que foi escrito na API.
- final response = await http.post(
- // Monta URL final -> base + endpoint.
- join(_url, 'dogs'),
- // Configura headers da requisição.
- headers: <String, String>{
- 'Content-Type': 'application/json; charset=UTF-8',
- },
- // Envia dados no body. ID não é enviado pois a API gerencia como auto incremento.
- body: jsonEncode(<String, dynamic>{
- 'name': dog.name,
- 'age': dog.age,
- }),
- );
- // Se a resposta foi 201 -> sucesso e retorna o objeto Dog armazenado na API.
- if (response.statusCode == 201) {
- return Dog.fromMap(jsonDecode(response.body));
- }
- // Caso contrário lança erro.
- else {
- throw Exception('Falha ao salvar dado na API');
- }
- }
- // Método responsável por atualizar um objeto na API.
- Future<Dog> updateDog(Dog dog) async {
- // Envia dados via put e obtem como retorno o objeto que foi escrito na API.
- final response = await http.put(
- // Monta URL final -> base + endpoint.
- join(_url, 'dogs/${dog.id}'),
- // Configura headers da requisição.
- headers: <String, String>{
- 'Content-Type': 'application/json; charset=UTF-8',
- },
- // Envia dados no body. ID não é enviado pois a API gerencia como auto incremento.
- body: jsonEncode(<String, dynamic>{
- 'name': dog.name,
- 'age': dog.age,
- }),
- );
- // Se a resposta foi 200 -> sucesso e retorna o objeto Dog armazenado na API.
- if (response.statusCode == 200) {
- return Dog.fromMap(jsonDecode(response.body));
- }
- // Caso contrário lança erro.
- else {
- throw Exception('Falha ao atualizar um dado na API!');
- }
- }
- // Método responsável por obter um único objeto da API (dado um id).
- Future<Dog> getDog(String id) async {
- // Solicita dados via get e obtem como retorno o objeto que foi lido da API.
- final response = await http.get(
- // Monta URL final -> base + endpoint.
- join(_url, 'dogs/$id'));
- // Se a resposta foi 200 -> sucesso e retorna o objeto Dog lido da API.
- if (response.statusCode == 200) {
- return Dog.fromMap(jsonDecode(response.body));
- }
- // Caso contrário lança erro.
- else {
- throw Exception('Falha ao carregar dados da API!');
- }
- }
- // Método responsável por obter a lista com todos os dados da API.
- Future<List<Dog>> getDogs() async {
- // Solicita dados via get e obtem como retorno uma lista de objetos lidos da API.
- final response = await http.get(
- // Monta URL final -> base + endpoint.
- join(_url, 'dogs'));
- List<Dog> listDogs;
- // Se a resposta foi 200 -> sucesso: monta a lista a retorna.
- if (response.statusCode == 200) {
- final List dogs = jsonDecode(response.body);
- listDogs = List.generate(dogs.length, (i) {
- return Dog.fromMap(dogs[i]);
- });
- return listDogs;
- }
- // Caso contrário lança erro.
- else {
- throw Exception('Falha ao carregar dados da API!');
- }
- }
- // Método responsável por deletar um objeto da API (dado um id);
- Future deleteDog(String id) async {
- // Solicita remoção via delete.
- final response = await http.delete(
- // Monta URL final -> base + endpoint.
- join(_url, 'dogs/$id'),
- // Configura headers da requisição.
- headers: <String, String>{
- 'Content-Type': 'application/json; charset=UTF-8',
- },
- );
- // Caso a resposta seja diferente de 200 lança erro.
- if (response.statusCode != 200) {
- throw Exception('Falha ao deletar o registro Dog com id=$id!');
- }
- }
- // Método responsável por deletar todos os objetos armazenados na API.
- Future deleteAllDogs() async {
- // Lista de objetos Dog com todos os objetos presentes na API.
- final List<Dog> dogs = await getDogs();
- // Percorre cada objeto da lista e solicita remoção via delete.
- for (Dog dog in dogs) {
- final response = await http.delete(
- // Monta URL final -> base + endpoint.
- join(_url, 'dogs/${dog.id}'),
- // Configura headers da requisição.
- headers: <String, String>{
- 'Content-Type': 'application/json; charset=UTF-8',
- },
- );
- // Caso a resposta seja diferente de 200 lança erro.
- if (response.statusCode != 200) {
- throw Exception('Falha ao deletar o registro Dog com id=${dog.id}!');
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment