← Voltar ao blog

Levar Flutter a sério: da ideia à Play Store e à web Wasm

O que aprendi publicando o PokeData de verdade — Android, Firebase, Cloudflare Pages/Workers, CI/CD e os trade-offs feios que tutorial não mostra.

Projeto pessoal também revela engenharia. O PokeData nasceu como Pokédex, mas o desafio que me interessava não era “consumir uma API de Pokémon”: era fechar o ciclo de um produto mobile-first com backend, auth, persistência, loja e web em produção.

Código aberto no GitHub, demo em pokedata.kaique.site e app na Play Store. Abaixo, o que doeu de verdade — e o que eu repetiria.

Um codebase, duas superfícies hostis

Flutter brilha no discurso de multiplataforma. Na prática, Android e Web discordam em auth, headers de segurança, deep links e no custo de Wasm. Eu quis um app que funcionasse bem com o polegar e ainda assim sobrevivesse no browser sem ser um afterthought.

Riverpod para estado, Firebase Auth + Firestore para identidade e favoritos, modo convidado para reduzir fricção. Google Sign-In no mobile; na web, e-mail/senha — porque Wasm multi-thread com COOP/COEP não combina com o helper de Google Auth do Firebase. Isso não é desculpa: é trade-off documentado e consciente.

Produção não é flutter run

Secrets fora do git (dart_defines, CI secrets). App Bundle com signing de release. Domínio custom no Cloudflare Pages com redirects de SPA e headers pensados para SharedArrayBuffer. Pipeline que roda analyze e testes em todo push, deploy de produção no master e preview por PR.

Cada um desses itens é chato. Juntos, são a diferença entre “tenho um projeto Flutter no GitHub” e “eu opero um app”.

Guess the Pokémon — e o free tier como constraint de design

A Pokédex sozinha ainda é “app de referência”. O Guess the Pokémon forçou um segundo produto dentro do mesmo codebase: modo local com catálogo embutido e modo competitivo com Cloudflare Worker + D1, token Firebase nas mutações, leaderboards e rate limits.

O Worker não chama PokéAPI em request time — o catálogo vai versionado no repo. Há monitor de uso contra os tetos diários de Workers/D1. Infra a US$ 0 não é slogan: é a regra que molda sessões, abuse caps e o fato de o competitivo ser opcional se a URL da API não estiver definida.

Por que isso importa na minha narrativa profissional

No trabalho eu vivo Java/Spring, Vue e Azure em sistemas industriais. No PokeData eu provei o outro braço: mobile híbrido, Firebase/GCP, Cloudflare (Pages + Workers/D1) e disciplina de release sem time de plataforma me segurando a mão.

Recrutador que lê só o cargo vê “full-stack industrial”. Quem abre o PokeData vê alguém que também entrega ponta a ponta quando o produto é meu — inclusive as partes sem glamour.