0
respostas

Evoluindo o Codigo Agendando consultas para uma clínica veterinária

import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart';
import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:diacritic/diacritic.dart';

void main() async {
await initializeDateFormatting('pt_BR', null);
await exibirMenu();
}

Future exibirMenu() async {
while (true) {
print("=== Sistema de Consultas Veterinárias ===");
print("1 Buscar por nome do profissional");
print("2 Buscar por nome do pet");
print("0 Sair");
stdout.write("Escolha uma opção: ");
String? opcao = stdin.readLineSync();

if (opcao == '1') {
  stdout.write("\nDigite o nome do profissional: ");
  String? nome = stdin.readLineSync();
  if (nome != null && nome.isNotEmpty) {
    await buscarConsultas(filtro: nome, tipo: "veterinarian");
  }
} else if (opcao == '2') {
  stdout.write("\nDigite o nome do pet: ");
  String? nomePet = stdin.readLineSync();
  if (nomePet != null && nomePet.isNotEmpty) {
    await buscarConsultas(filtro: nomePet, tipo: "pet_name");
  }
} else if (opcao == '0') {
  print("\nSaindo do sistema. Até logo!");
  break;
} else {
  print("\nOpção inválida! Tente novamente.\n");
}

}
}

Future buscarConsultas({required String filtro, required String tipo}) async {
print("\nBuscando dados no servidor...");

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> consultas = jsonDecode(response.body);

  // Remove acentos e faz comparação sem diferenciação de maiúsculas/minúsculas
  List<Map<String, dynamic>> resultados = consultas
      .where((element) =>
          removeDiacritics((element[tipo] as String).toLowerCase()) ==
          removeDiacritics(filtro.toLowerCase()))
      .cast<Map<String, dynamic>>()
      .toList();

  print("\nResposta recebida com sucesso!\n");

  if (resultados.isNotEmpty) {
    final DateFormat formatoBR =
        DateFormat("EEEE, dd/MM/yyyy HH:mm", "pt_BR");

    print("Foram encontradas ${resultados.length} consultas para '$filtro':\n");

    for (var consulta in resultados) {
      DateTime dataConsulta = DateTime.parse(consulta["appointment"]);
      String dataFormatada = formatoBR.format(dataConsulta);

      print("Data: $dataFormatada");
      print("Veterinário: ${consulta["veterinarian"]}");
      print("Pet: ${consulta["pet_name"]}");
      print("-----------------------------");
    }
  } else {
    print("Nenhuma consulta encontrada para '$filtro'.");
  }
} else {
  print("Erro na requisição. Código HTTP: ${response.statusCode}");
}

} catch (e) {
print("Erro no método async/await: $e");
}

print("Fim da busca.\n");
}

Fiz algumas melhorias como: Ordenar em ordem crescente, Data no formato BR, e criei um menu interativo para poder filtrar por profissional e por pet e coloquei o removeDiacritics, pra evitar erro de digitação por conta das acentuações

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora