Menu
Coddy logo textTech

Recapitulação — Buscador de dados

Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy. Lição 81 de 110.

challenge icon

Desafio

Fácil

Vamos criar uma classe DataFetcher que reúne todos os conceitos de OOP assíncrada deste capítulo! Você criará um serviço de dados que usa inicialização assíncrona, métodos assíncronos para buscar itens individuais e um fluxo para fornecer vários resultados ao longo do tempo.

Você organizará seu código em dois arquivos:

  • data_fetcher.dart: crie uma classe DataFetcher que simula a busca de dados de uma fonte remota. Sua classe deve ter:
    • Um campo String final chamado source que armazena de onde vêm os dados
    • Um construtor privado que inicializa a fonte
    • Um método de fábrica assíncrono estático connect(String sourceName) que retorna um Future<DataFetcher>. Simule um atraso de conexão de 100 milissegundos e, em seguida, retorne uma nova instância com a fonte definida como o nome fornecido
    • Um método assíncrono fetchItem(int id) que retorna um Future<String>. Simule um atraso de 50 milissegundos e, em seguida, retorne uma string no formato: [source]-Item-[id]
    • Um método gerador de fluxo fetchMultiple(int count) que retorna um Stream<String>. Ele deve produzir itens para IDs de 1 até, inclusive, count, usando seu método fetchItem para cada um deles (aguarde cada busca antes de produzir o item)
  • main.dart: importe seu buscador de dados e demonstre os três padrões assíncronos funcionando juntos:
    • Imprima Connecting to data source...
    • Use a fábrica assíncrona para conectar-se a uma fonte chamada CloudDB
    • Imprima Connected to [source] usando o campo de fonte do buscador
    • Imprima uma linha vazia
    • Imprima Fetching single item:
    • Busque e imprima o item com o ID 42
    • Imprima uma linha vazia
    • Imprima Fetching multiple items:
    • Use await for para iterar por fetchMultiple(3) e imprimir cada item
    • Imprima uma linha vazia
    • Imprima All operations complete!

Este desafio combina o padrão de fábrica assíncrona estática para inicialização, métodos assíncronos regulares para operações individuais e async* com yield para transmitir vários resultados. Observe como o método do fluxo pode chamar outros métodos assíncronos internamente!

Saída esperada:

Connecting to data source...
Connected to CloudDB

Fetching single item:
CloudDB-Item-42

Fetching multiple items:
CloudDB-Item-1
CloudDB-Item-2
CloudDB-Item-3

All operations complete!

Experimente você mesmo

import 'data_fetcher.dart';

void main() async {
  // TODO: Imprima 'Connecting to data source...'
  
  // TODO: Use a factory assíncrona para se conectar a uma fonte chamada 'CloudDB'
  
  // TODO: Imprima 'Connected to [source]' usando o campo source do fetcher
  
  // TODO: Imprima uma linha vazia
  
  // TODO: Imprima 'Fetching single item:'
  
  // TODO: Busque e imprima o item com ID 42
  
  // TODO: Imprima uma linha vazia
  
  // TODO: Imprima 'Fetching multiple items:'
  
  // TODO: Use 'await for' para iterar por fetchMultiple(3) e imprimir cada item
  
  // TODO: Imprima uma linha vazia
  
  // TODO: Imprima 'All operations complete!'
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Dart online