Black November

ATÉ 50% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

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

Desafio: tratando exceções em outros contextos = dio.dart

Arquivo: account_dio_service.dart

import 'dart:async';
import 'package:dio/dio.dart';
import 'dart:convert';
import 'package:dart_assincronismo/models/account.dart';
import 'package:dart_assincronismo/api_key.dart';

class AccountDioService {
  final Dio _dio = Dio();
  final StreamController<String> _streamController = StreamController<String>();
  Stream<String> get streamInfos => _streamController.stream;

  String url = "https://api.github.com/gists/b52a4ebbde885199f357ba69855c82a9";

  Future<List<Account>> getAll() async {
    Response response = await _dio.get(url);
    _streamController.add("${DateTime.now()} | Requisição de leitura.");

    Map<String, dynamic> mapResponse = response.data;
    List<dynamic> listDynamic = json.decode(
      mapResponse["files"]["accounts.json"]["content"],
    );

    List<Account> listAccounts = [];

    for (dynamic dyn in listDynamic) {
      Map<String, dynamic> mapAccount = dyn as Map<String, dynamic>;
      Account account = Account.fromMap(mapAccount);
      listAccounts.add(account);
    }
    return listAccounts;
  }

  addAccount(Account account) async {
    List<Account> listAccounts = await getAll();
    listAccounts.add(account);

    List<Map<String, dynamic>> listContent = [];
    for (Account account in listAccounts) {
      listContent.add(account.toMap());
    }

    String content = json.encode(listContent);

    Response response = await _dio.post(
      url,
      options: Options(headers: {"Authorization": "Bearer $gitHubToken"}),
      data: {
        "description": "accounts.json",
        "public": true,
        "files": {
          "accounts.json": {"content": content},
        },
      },
    );

    if (response.statusCode.toString()[0] == "2") {
      _streamController.add(
        "${DateTime.now()} | Requisição de adição bem sucedida(${account.name}).",
      );
    } else {
      _streamController.add(
        "${DateTime.now()} | Requisição de adição falhou(${account.name}).",
      );
    }
  }
}

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 está organizado e funcionando dentro da proposta do exercício, cumprindo bem o fluxo principal de leitura e escrita utilizando o Dio. A estrutura geral dos métodos e o uso do StreamController seguem coerentes com o que foi pedido.

Há apenas um ponto que vale atenção: o exercício pede o tratamento de exceções usando blocos try, on e catch, e atualmente os métodos estão fazendo somente as requisições, sem tratamento. Isso pode gerar falhas diretas caso a resposta da API venha com erro, caso o conteúdo não esteja no formato esperado ou em situações como ausência de rede.

No mais, parabéns pelo avanço no desafio e obrigado por compartilhar sua solução. O fórum está à disposição.

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