🛣️ViaCEP Request

Aqui vou demonstrar como foi feito a requisição de dados de endereço, através do CEP, utilizando a API ViaCep, seguindo a nossa arquitetura padrão.

Primeiramente, a declaração do objeto que é retornado pela API:

import 'package:json_annotation/json_annotation.dart';

part "address.g.dart";

@JsonSerializable()
class Address {
  @JsonKey(defaultValue: '')
  final String? cep;
  @JsonKey(defaultValue: '', name: "logradouro")
  final String? street;
  @JsonKey(defaultValue: '', name: "bairro")
  final String? neighboor;
  @JsonKey(defaultValue: '', name: "complemento")
  final String? complement;
  @JsonKey(defaultValue: '', name: "localidade")
  final String? city;
  @JsonKey(defaultValue: '', name: "uf")
  final String? state;

  Address({
    this.cep,
    this.street,
    this.neighboor,
    this.complement,
    this.state,
    this.city,
  });

  factory Address.fromJson(Map<String, dynamic> json) =>
      _$AddressFromJson(json);

  Map<String, dynamic> toJson() => _$AddressToJson(this);
}

Seguindo o uso de nossa arquitetura, no código abaixo vou apenas demonstrar como ficou o usecase abstrato e a sua implementação.

E por fim, a declaração abstrata do repository e a sua implementação no datasource:

Este datasource, tem que ser implementado no getIt (ou afins), passando como url base a seguinte:

Da seguinte maneira:

Com isso feito, podemos simplesmente fazer a chamada do nosso usecase abstrato, passando como paramêtro um CEP válido. Ex:

E o retorno será o nosso objeto Address criado anteriormente.

circle-exclamation

Last updated