📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Flutter. Recomendado revisar antes de começar.

💙 Arquitetura Limpa & Gerenciamento BLoC em Flutter 3

v2.0 — Flutter 3, Dart, Clean Architecture, flutter_bloc, GetIt e Equatable

Trilha de Especialização Pedagógica — Projeto 2 de 4

🎓 Nível Profissional Simulado: Desenvolvedor Flutter Pleno / Engenheiro Mobile. O padrão BLoC (Business Logic Component) com Clean Architecture é o padrão ouro adotado por bancos (Nubank, C6 Bank) e unicórnios de tecnologia para garantir separação estrita de responsabilidades e desacoplamento total da interface visual.

—`

🎯 Objetivo & Escopo do Projeto

Construir o módulo de Conta Digital e Transferências Pix em Flutter 3, aplicando a Clean Architecture em camadas (Domain, Data, Presentation), fluxo unidirecional de eventos e estados via flutter_bloc, injeção de dependências com get_it e estados imutáveis com Equatable.

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Tech Lead de Banco Digital)

“Precisamos refatorar nosso fluxo de transferência Pix. A lógica não pode ficar dentro dos widgets da tela. Exigimos o padrão BLoC com eventos explícitos (CarregarSaldoEvent, RealizarPixEvent), estados atômicos de tela (ContaLoading, ContaLoaded, ContaError) e injeção de dependências para podermos trocar a fonte de dados de Mock para API REST sem tocar na UI.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Carregar saldo da conta bancária emitindo estados ContaLoading e ContaLoaded. “estados atômicos de tela”
RF02 Funcional Processar transferência Pix com validação de saldo insuficiente emitindo ContaError. “validação de saldo no Pix”
RF03 Funcional Reagir com BlocConsumer para atualização de UI e exibição de SnackBars. “padrão BLoC com eventos”
RNF01 Não-Funcional Desacoplamento da camada de domínio em relação ao framework Flutter (dartz/Either). Clean Architecture
RNF02 Não-Funcional Imutabilidade e comparação por valor com Equatable. Previsibilidade de Estado

—`

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como correntista, quero ver o saldo da minha conta carregar com feedback visual de progresso. Alta
US02 Como usuário, quero ser alertado imediatamente se tentar transferir mais do que meu saldo permite. Alta

—`

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-flutter-clean-bloc

# Executar a aplicacao Flutter no emulador
flutter run

—`

🛠️ Fase 4 — Implementação Guiada do BLoC (conta_bloc.dart)

class ContaBloc extends Bloc<ContaEvent, ContaState> {
  double _saldoAtual = 5420.50;

  ContaBloc() : super(ContaInitial()) {
    on<CarregarSaldoEvent>((event, emit) async {
      emit(ContaLoading());
      await Future.delayed(const Duration(milliseconds: 600));
      emit(ContaLoaded(_saldoAtual));
    });

    on<RealizarPixEvent>((event, emit) async {
      emit(ContaLoading());
      if (event.valor > _saldoAtual) {
        emit(const ContaError('Saldo insuficiente para realizar o Pix.'));
      } else {
        _saldoAtual -= event.valor;
        emit(ContaLoaded(_saldoAtual));
      }
    });
  }
}

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd mobile_flutter_02_bloc_cleanarch

2. Execute a aplicação e os testes

flutter pub get
flutter run
flutter test

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/mobile_flutter_02_bloc_cleanarch`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Asserções BLoC

// Teste unitário de BLoC com bloc_test
blocTest<ContaBloc, ContaState>(
  'emite [ContaLoading, ContaLoaded] ao carregar saldo com sucesso',
  build: () => ContaBloc(),
  act: (bloc) => bloc.add(CarregarSaldoEvent()),
  expect: () => [ContaLoading(), const ContaLoaded(5420.50)],
);

—`

✅ Checkpoint Final

  1. Clean Architecture com BLoC implementada e testada.
  2. BlocConsumer gerenciando renderização e SnackBars de erro.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal