Exercício 3 - Enviando múltiplos produtos em uma requisição
import 'dart:convert';
import 'package:dartloja/api_key.dart';
import 'package:http/http.dart';
// Constantes de Configuração
const String gistApiurl = 'https://api.github.com/gists';
const String gistId = '0cd31f7049a703eabdcda407ef354c68';
typedef Produto = Map<String, dynamic>;
// Cria a lista inicial (ID 1, 2, 3)
List<Produto> criarCatalogoInicial() {
List<Produto> catalogo = [];
catalogo.add({'id': 1, 'name': 'Celular', 'price': 1500.00});
catalogo.add({'id': 2, 'name': 'Notebook', 'price': 4500.00});
catalogo.add({'id': 3, 'name': 'Tablet', 'price': 800.00});
return catalogo;
}
/// Exercício 3: Atualiza (PATCH) o Gist existente com a lista completa.
Future<void> enviarMultiplosProdutos(
List<Produto> produtos,
String nomeDaLista
) async {
final produtosJsonContent = json.encode(produtos);
final gistBody = {
"description": "Catálogo FINAL da Loja: $nomeDaLista",
"files": {
"produto_4.json": {
"content": produtosJsonContent, // A lista completa (agora com 1, 2, 3, 5, 6)
}
}
};
final jsonEncodedBody = json.encode(gistBody);
// A URL para PATCH é a base + o ID do Gist
Response response = await patch(
Uri.parse('$gistApiurl/$gistId'), // concaternando a URL com o ID
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $gitHubToken',
},
body: jsonEncodedBody,
);
// Status Code 200 para sucesso na atualização
if (response.statusCode == 200) {
print('\n O Catálogo da Loja foi atualizado no servidor com sucesso!!!');
final gistResponse = json.decode(response.body);
final arquivoJson = gistResponse['files']['produto_4.json']['content'];
final List<dynamic> catalogoRetornado = json.decode(arquivoJson);
print('\n--------------- Catálogo Atualizado (${catalogoRetornado.length} Itens) -------------');
// Exibição formatada e ordenada
catalogoRetornado.sort((a, b) => a['id'].compareTo(b['id']));
for (var item in catalogoRetornado) {
final id = item['id'].toString().padRight(2);
final name = item['name'].toString().padRight(18);
final price = item['price'].toStringAsFixed(2);
print('ID $id | Produto: $name | Preço: R\$ $price');
}
print('----------------------------------------------------------');
} else {
print('ERRO ao atualizar Gist (PATCH API): ${response.statusCode}');
print('Resposta da API: ${response.body}');
print('Verifique se o nome do arquivo no Gist é realmente "produto_4.json".');
}
}
void main() async {
// 1. Retorna a lista completa (ID 1, 2, 3, 4, 5, 6)
List<Produto> catalogo = [
...criarCatalogoInicial(), // Adiciona 1, 2, 3
{'id': 4, 'name': 'Monitor Ultrawide', 'price': 1200.00},
{'id': 5, 'name': 'Câmera', 'price': 2200.00},
{'id': 6, 'name': 'Headset', 'price': 350.00},
];
final nomeDoCatalogo = "Catálogo Final Lógico";
// CABEÇALHO
print('\n=========================================================');
print(' App Dart Shop - Relatório Gerencial Completo');
print('=========================================================');
print('Novos itens a ser enviado: ${catalogo.length} itens (IDs 1, 2, 3, 4, 5, 6)');
await enviarMultiplosProdutos(catalogo, nomeDoCatalogo);
}