Executando verificação de segurança...
2

Dart Puro - Como consumir uma API - Primeira Requisição

Sim, nós iremos utilizar apenas o Dart, nada de Flutter...

Você não precisa baixar nada para acompanhar, basta acessar o site:
https://dartpad.dev/

Se é a primeira vez que você está utilizando esse site, provavelmente você verá algo como:

// Copyright 2015 the Dart project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.

void main() {
  for (var i = 0; i < 4; i++) {
    print('hello $i');
  }
}

Mantenha a função main e apague o restante, deve ficar assim:

void main() {

}

Agora, iremos pegar a API que iremos utilizar, aqui está o link:
https://viacep.com.br/

Iremos utilizar no formato de json, então precisamos desse endpoint:
https://viacep.com.br/ws/01001000/json/

Se você acessar o link acima, deve ver isso:

{
  "cep": "01001-000",
  "logradouro": "Praça da Sé",
  "complemento": "lado ímpar",
  "bairro": "Sé",
  "localidade": "São Paulo",
  "uf": "SP",
  "ibge": "3550308",
  "gia": "1004",
  "ddd": "11",
  "siafi": "7107"
}

Então vamos começar!

Cliente que consumirá a API

Nós utilizaremos o pacote http como cliente, é muito simples utilizar, o que precisamos fazer é importa ele

import 'package:http/http.dart' as http;

void main() {

}

Vamos precisa do sufixo 'http' para que possamos acessar o conteúdo contido no arquivo 'http.dart' que importamos.

Primeira Requisição

Agora vamos escrever o código necessário para consumir a API e mostrar no console a resposta:

import 'package:http/http.dart' as http;

Future<void> main() async {

  final url = Uri.parse('https://viacep.com.br/ws/01001000/json/');

  final response = await http.get(url);

  if (response.statusCode == 200) {
    print(response.body);
  }
  
}

Vamos entender o que está acontecendo aqui.
Foi necessário alterar a assinatura da função 'main', antes ela era síncrona, porém passou a ser assíncrona, isso aconteceu porque o método 'get' do pacote 'http' é um 'Future', nós precisamos aguardar ('await') a execução dele na 'main', para fazer isso precisamos colocar um 'async' na 'main'.

Depois criamos uma variável do tipo 'Uri' que o tipo requirido pelo método 'get' do pacote 'http', nós usamos o 'parse' do 'Uri' por ele pedir apenas uma 'String' que é o que queremos, colocamos um 'final' pois a variável 'url' não terá seu valor alterado durante a execução do programa.

Depois criamos uma outra variável chamada 'response' que receberá a resposta aguardada do método 'get' do pacote 'http', o método 'get' retorna um 'Response' que contém algumas informações, dentre elas usamos algumas logo a seguir.

Verificamos se a requisição foi um sucesso verificando o 'código de status' que se caso for 200 significa que deu certo, e se deu certo, acessamos o 'body' e podemos ver pelo 'print' a mesma coisa que vimos quando acessamos o link pelo navegador.

{
  "cep": "01001-000",
  "logradouro": "Praça da Sé",
  "complemento": "lado ímpar",
  "bairro": "Sé",
  "localidade": "São Paulo",
  "uf": "SP",
  "ibge": "3550308",
  "gia": "1004",
  "ddd": "11",
  "siafi": "7107"
}

Que lindo! Foi tão simples né ?

Mas que tal deixarmos as coisas mais interessantes modelando os dados ?

Continuação:
Dart Puro - Como consumir uma API - Modelando dados ( fromJson/fromMap )

Carregando publicação patrocinada...
1

import 'package:http/http.dart' as http;
import 'dart:convert';

Future main() async {

final url = Uri.parse('https://viacep.com.br/ws/01001000/json/');

final response = await http.get(url);

if (response.statusCode == 200) {
print(response.body);
}

Map<String, dynamic> dadosEmMap = jsonDecode(response.body);
print(dadosEmMap["cep"]); // assim da para usar qualquer informação no código pela "chave"
// resultado: 01001-000
}

1