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