Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Lista de exercícios - Exercício 3

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);
}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta
solução!

Olá, José, como vai?

Seu código cumpre bem a ideia de enviar vários produtos em uma única requisição, montando o JSON com a lista completa e fazendo o PATCH para o Gist.

Obrigado por compartilhar seu código e continue postando suas soluções no fórum, toda a comunidade está à disposição para acompanhar sua evolução e tirar dúvidas.

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