1
resposta

Agendando consultas para uma clínica veterinária

import 'package:http/http.dart';
import 'dart:convert';

void main() {
  requestDataAsync("Dra. Patrícia Gomes"); 
}

Future<void> requestDataAsync(String veterinario) async {
  print("Iniciando requisição.........");

  String url =
      "https://raw.githubusercontent.com/alura-cursos/dart_assincronismo_api/aula05/.json/vet.json";

  try {
    Response response = await get(Uri.parse(url));

    if (response.statusCode == 200) {
      List<dynamic> accounts = jsonDecode(response.body);

      // Filtra todas as consultas da veterinária informada
      List<Map<String, dynamic>> consultas = accounts
          .where((element) => element["veterinarian"] == veterinario)
          .cast<Map<String, dynamic>>()
          .toList();

      print("Resposta recebida da API.........");

      if (consultas.isNotEmpty) {
        print("Foram encontradas ${consultas.length} consultas para $veterinario:\n");

        for (var consulta in consultas) {
          print("Data: ${consulta["appointment"]}");
          print("Pet: ${consulta["pet_name"]}");          
          print("-----------------------------");
        }
      } else {
        print("Nenhuma consulta encontrada para '$veterinario'.");
      }
    } else {
      print("Erro na requisição. Código HTTP: ${response.statusCode}");
    }
  } catch (e) {
    print("Erro no método async/await: $e");
  }

  print("Fim da função async/await.\n");
}

Optei por esse exercício pelo maior grau de complexidade, pois tem que filtrar pelo nome do profissional e devolver todas as consultas a ele relacionadas, e assim testar o que foi passado como ensinamento e procurando melhorar, os conhecimentos

1 resposta

Olá, Paulo, como vai?

Seu código está muito bem estruturado e demonstra uma boa compreensão do uso de funções assíncronas e do pacote http para lidar com requisições. A lógica para filtrar as consultas por veterinário está correta e o fluxo de tratamento de respostas da API está bem definido.

Se quiser deixar o resultado ainda mais completo, você pode ordenar as consultas antes de exibi-las, utilizando algo como:

consultas.sort((a, b) => a["appointment"].compareTo(b["appointment"]));

Isso garantirá que as consultas apareçam em ordem de data e horário, conforme a proposta do exercício.

Parabéns por se desafiar e aplicar os conceitos do curso de forma prática. Continue compartilhando suas soluções e explorando maneiras de aprimorar seu código.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!