
Flutter
Resumo do episódio 63 do AguiarDev Talks. Prefere assistir? Veja o episódio completo →
Tiago Aguiar recebe Jacob Moura, fundador da comunidade Flutterando, para uma conversa aprofundada sobre o Flutter: de onde veio o problema que ele resolve, por que a Google optou por desenhar cada widget do zero e o que esperar de mercado para quem decide investir no framework hoje.
O que foi discutido
- A história do desenvolvimento cross-platform, do C dos anos 90 ao React Native
- Por que soluções híbridas como o Cordova e o próprio React Native esbarravam em gargalos de performance
- A decisão do Flutter de abandonar os widgets nativos (OEM) de cada plataforma
- A origem do Dart como um projeto fracassado da Google e seu resgate para o Flutter
- A diferença entre Flutter como Toolkit (baixo nível) e como Framework (alto nível)
- Como outros frameworks declarativos (Jetpack Compose, KMP, SwiftUI) seguiram o caminho aberto pelo Flutter
- As ferramentas de teste nativas do SDK, incluindo testes de unidade, de widget e o Flutter Drive
- Como está o mercado de trabalho para quem quer começar em Flutter hoje
Sobre Jacob Moura
Jacob Moura é fundador da Flutterando, comunidade brasileira de Flutter ativa desde 2018 e hoje a maior da América Latina dedicada ao framework. A comunidade reúne mais de 14 mil pessoas entre Discord e Telegram e um canal no YouTube com quase 60 mil inscritos, oferecendo conteúdo gratuito do básico ao avançado — de roadmap de aprendizado a ajuda para conseguir a primeira vaga na tecnologia.
Principais pontos
O problema do cross-platform é anterior ao mobile
Muito antes de iOS e Android existirem, empresas que desenvolviam em C já enfrentavam o problema de compilar o mesmo código para sistemas operacionais diferentes. O Java tentou resolver isso com uma máquina virtual que mediava a comunicação entre o código e o sistema operacional — mas o mesmo problema reapareceria anos depois, multiplicado pela chegada de iPhone, Android e Windows Phone.
"Naquela época a galera tinha um problema: na hora que desenvolviam em C, tinha que buildar para o Windows, tinha que buildar para alguns Linux, tinha que buildar para o Solaris e para o Mac" por Jacob Moura
Soluções híbridas e o React Native ainda dependiam de pontes
As primeiras tentativas de resolver o cross-platform mobile usavam WebView — pacotar um site em HTML e CSS dentro de cada plataforma, como fazia o Cordova. O React Native, a partir de 2015, avançou ao traduzir componentes para os widgets nativos (os chamados widgets OEM) na hora da compilação, mas manteve a lógica de negócio em JavaScript, que precisava ser convertida para a linguagem nativa através de uma ponte.
"A parte da regra de negócio, que era JavaScript, ela não podia ser compilada, então ela precisava ser convertida para a linguagem nativa... e isso gerava um gargalo" por Jacob Moura
O Flutter resolveu abandonando os widgets nativos das plataformas
Em vez de traduzir componentes para os widgets do sistema operacional, o Flutter desenha cada elemento de tela do zero usando a engine gráfica Skia — originalmente criada para jogos, no mesmo espírito de motores como o Unity. Isso elimina a dependência de pontes de tradução e permite compilar nativamente tanto a interface quanto a regra de negócio.
"O Flutter tenta fazer o quê? Ele desenha a tela toda e compila nativamente tanto a parte da regra de negócio quanto a parte do desenho de tela" por Jacob Moura
O Dart nasceu para outro propósito e fracassou antes de ser resgatado
A linguagem Dart surgiu em 2011 como tentativa da Google de substituir o JavaScript, com uma VM embarcada diretamente no Chrome. O projeto não emplacou e foi abandonado — anos depois, foi resgatado como a linguagem ideal para o Flutter, já que sua sintaxe foi padronizada pela mesma organização (ECMA) responsável por C#, Java e JavaScript, o que reduz bastante a curva de aprendizado para quem já programa.
"Ele foi criado para substituir o JavaScript, em 2011... falhou miseravelmente, a comunidade não adotou, não teve jeito e tudo mais e foi abandonado" por Jacob Moura
Flutter é Toolkit e Framework ao mesmo tempo
Por baixo, o Flutter reúne a linguagem Dart, a engine Skia e um "embed" próprio para cada plataforma — o que forma o Toolkit. Por cima, existe uma camada de alto nível com os widgets prontos do Material e do Cupertino, que permite ao desenvolvedor trabalhar de forma declarativa e orientada a objetos, sem lidar diretamente com a parte de baixo nível.
"O Flutter é tanto um Toolkit para fazer esses builds... quanto também um Framework, onde tem um Framework em Dart, com todas as ferramentas do Material, do Cupertino, com esses widgets pré-prontos" por Jacob Moura
Testes já vêm embarcados no SDK, incluindo testes de tela
Diferente de ecossistemas onde é preciso escolher e configurar bibliotecas de teste à parte, o Flutter traz nativamente ferramentas para testes unitários, testes de widget (possíveis porque telas são classes) e o Flutter Drive, que substitui ferramentas como o Robotium abrindo o próprio emulador para rodar testes de integração — sem exigir conhecimento de ferramentas externas como Appium.
"O Flutter Drive... ele substitui outras tecnologias como o Robotium e tudo mais, ele basicamente vai abrir o emulador... isso tudo construído e escrito em Dart, já vindo nativamente" por Jacob Moura
Frase de destaque
"Seja expert em programação e o que aparecer no mercado você domine. Essa é a ideia: se você sabe programar, você não fica sem emprego" por Jacob Moura
Lições do episódio
- Entender a história do cross-platform explica por que o Flutter tomou decisões técnicas tão diferentes dos frameworks anteriores, em vez de ser só mais uma alternativa no mercado.
- Não é preciso temer o Dart como uma linguagem "isolada" — sua sintaxe foi padronizada pela mesma organização responsável por C#, Java e JavaScript.
- Aprender a programar bem importa mais do que dominar cedo demais uma única linguagem ou framework.
- Testes de unidade, widget e integração já vêm no SDK do Flutter, reduzindo a barreira para incorporar qualidade desde o início do projeto.
- Startups e projetos novos são o principal ponto de entrada no mercado de Flutter — apps legados ainda tendem a usar outras tecnologias.
- Participar de comunidades como a Flutterando acelera o aprendizado e ajuda a conseguir a primeira oportunidade no framework.