5 motivos que nos fizeram escolher Flutter

Joao Paulo Januário
Mobile2you
Published in
7 min readNov 3, 2020

O desenvolvimento multiplataforma está longe de ser novidade no mundo mobile. Com diversos frameworks tendo sido lançados na última década, também não é novidade o fato de que essas soluções, mesmo com seus pontos positivos, demoraram a engrenar justamente pelos seus vários pontos negativos, em sua maioria relacionados à performance.

Assim como a maioria dos desenvolvedores nativos, sempre tive um pé atrás com cada novo framework que surgia, e alguns dias de teste já me eram suficientes pra abandoná-los. Até que, no fim de 2018, a Google anunciou oficialmente o Flutter. Ao saber da novidade dei uma breve lida sobre ele e não me convenci, pensei “ok, só mais um, nem vou perder meu tempo”. E não perdi. Voltei pro nativo e segui minha vida normalmente.

Fim do artigo.

Ok, não resisti e meses depois resolvi testar a novidade. Dei uma olhada na documentação, uma fuçada no Hello World, coloquei uns botões, mudei as cores aqui e ali, fiz uma tela, duas, e quando dei por mim estava há dias mexendo com Flutter sem ser obrigado a isso. Parece que dessa vez o bicho do multiplataforma tinha me picado.

Mas afinal, como ele realmente é? Onde vive? Do que se alimenta? Pra descobrir tudo isso tive que ir mais a fundo e dedicar mais tempo nele, desenvolvendo alguns projetos de fato. Fiz alguns projetos pessoais, os resultados foram bem animadores e um tempo depois a Mobile2you aceitou o desafio de realizarmos o primeiro projeto do zero em Flutter! E, assim como o primeiro projeto em Flutter, aqui estamos no primeiro artigo da Mobile2you no Medium onde irei compartilhar os principais benefícios do framework que identificamos nesse início de jornada. E claro, em forma de top 5 pois é disso que o povo gosta.

Performance

Eu diria que esse é um dos pontos que mais faz o Flutter se destacar em relação às outras opções multiplataforma, principalmente pelo fato do Dart compilar em código nativo e não haver a necessidade de acessar os widgets OEM (componentes nativos de UI). A renderização é executada através da biblioteca gráfica Skia e o Flutter possui seus próprios componentes de UI, funcionando como uma espécie de game engine e não necessitando de uma ponte entre o aplicativo e os componentes nativos da plataforma - como é o caso do React Native, por exemplo. Isso permite, entre outras coisas, uma ótima performance na UI de 60 fps (frames por segundo), ou até 120 fps nos devices com esse recurso disponível, mesmo com interfaces mais complexas.

Produtividade

Duas palavras: hot reload. Próximo.

Ta bom, eu explico:

O hot reload é um recurso que permite que as mudanças que você faz no código sejam mostradas imediatamente no device ou emulador que o aplicativo está sendo executado, sem a necessidade de fazer o build novamente ou até reiniciá-lo, pois ele mantém todo o estado atual e só atualiza o que foi modificado (para os desenvolvedores Android, digamos que seja um Instant Run que deu certo). Isso reduz drasticamente o tempo levado tanto na construção de uma tela, já que você desenvolve e vê o resultado instantaneamente, como também nas camadas de negócio e comunicação com o backend, pois também é possível utilizar o hot reload pra modificar algum model ou endpoint e já utilizá-lo sem ter que reiniciar o app pra chegar no mesmo ponto do fluxo.

Isso é possível graças ao fato da linguagem Dart ser compilada tanto AOT (Ahead of Time) como JIT (Just in Time). Sendo o JIT utilizado durante o desenvolvimento, pois permite a execução em tempo real das alterações sem termos que recompilar o projeto, e o AOT, que é a compilação ~real oficial~ que gera o instalador pros devices que irão pras lojas.

Flexibilidade

Quem já desenvolve em Flutter já deve ter visto muito por aí a frase “Everything is a Widget”, ou, no nosso caso, “É tudo widget”. E sim, é tudo widget MESMO, desde um botão, um campo de texto, uma margem, até uma tela completa. É tudo widget!

Isso te dá muito mais flexibilidade pra construir as telas da forma que você quer, independente da plataforma, já que como foi dito anteriormente todos os componentes são renderizados usando a própria engine, não fazendo nenhum tipo de conversão pra componentes nativos. É como se tivéssemos milhares de opções de peças Lego e fôssemos encaixando umas nas outras pra construir o que quisermos. Muitas dessas “peças” já vem prontas pra usar, seguindo o Material Design ou Cupertino Style, e outras nós mesmos podemos montar e reutilizar no app inteiro. E vale dizer que em diversos casos é muito mais prático construir uma funcionalidade no Flutter em relação ao nativo, tanto em quantidade como complexidade do código — um dos melhores exemplos disso são os listviews.

Testes

Eu sei, ninguém nunca tem tempo (ou seria prioridade? fica a reflexão) pra escrever testes, mas ter um ambiente mais propício pra isso aumenta as chances de escrevê-los. Um dos principais motivos que faz com que muitos desenvolvedores acabem não se dedicando aos testes é a dificuldade em aprender de fato a implementá-los, seja pela escassez de material sobre o assunto ou pela grande complexidade de cenários a serem testados — pesa também o fato de que não ter uma arquitetura testável torna as coisas quase impossíveis, mas isso é assunto pra outro post.

No Flutter os testes são mais diretos ao ponto, com o código não se distanciando tanto de como é a implementação do projeto em si, o que reduz a curva de aprendizado. Os testes unitários são muito rápidos de serem executados e é possível testar os widgets do aplicativo sem nem precisar rodá-lo de fato em um device. A barreira pra implementar testes com Flutter não é tão grande como em outros frameworks pra quem quer se dedicar no assunto, pois mesmo com quem tem pouca ou nenhuma experiência com testes encontra uma boa introdução na documentação oficial e em artigos internet afora. De qualquer forma, ainda acredito se tratar de um tema que poderia ser mais explorado pela comunidade, e sinto que pela facilidade que o Flutter trouxe esse tipo de conteúdo vem aumentando.

Suporte e Comunidade

Ao aprender uma nova tecnologia é muito importante uma boa documentação, e isso é algo que não podemos reclamar da Google. A documentação oficial é bastante completa e possui até alguns artigos dedicados a desenvolvedores que vieram de iOS ou Android, por exemplo, sendo um ótimo ponto inicial pra quem não sabe por onde começar. Sem contar o ótimo canal no YouTube, que está sempre lançando vídeos cobrindo diversos assuntos.

Gráfico do Google Trends que mostra o crescimento do interesse em Flutter nos últimos anos

Apesar de ter sua versão estável lançada há apenas dois anos, já possui uma comunidade bem robusta e que não para de crescer, sendo um dos repositórios do GitHub de maior popularidade. Grande parte dos problemas enfrentados durante o desenvolvimento são resolvidos com uma rápida pesquisa no Google e já é enorme a quantidade de packages oferecidos pra implementação das principais features que os aplicativos costumam ter e necessitam de algum recurso nativo. E é claro, não poderia deixar de citar a Flutterando, que é a maior comunidade de Flutter no Brasil, sempre produzindo muito conteúdo, e também à Nubank que foi a responsável por dar um grande pontapé no Flutter por aqui após a publicação de um artigo onde explicam detalhadamente como tomaram essa decisão de escolha do framework, que vale muito a leitura.

Conclusão

O intuito desse artigo foi mostrar alguns dos benefícios encontrados até agora durante nossa experiência com Flutter. Tudo indica que o framework continue crescendo e conquistando espaço no mercado de desenvolvimento mobile — e quem sabe até no mercado de web e desktop, pois já é possível desenvolver pra essas plataformas em versões beta e alfa, respectivamente. Mas mesmo com todo esse crescimento e adesão por diversas empresas, ele não vem pra substituir completamente o desenvolvimento nativo, que continua sendo a melhor escolha em alguns casos, como em aplicativos que utilizem muitos recursos do hardware, que precisam de uma interface muito fiel de cada plataforma, ou até pelo próprio know-how dos desenvolvedores da empresa.

Por outro lado, o Flutter pode ser extremamente benéfico em vários cenários, principalmente para start ups e MVPs, devido à baixa curva de aprendizado, velocidade de desenvolvimento, resultados alcançados, e, é claro, por não necessitar ter uma equipe especializada em cada plataforma e dividirem a mesma base de código. Já no nosso primeiro projeto com Flutter estimamos um ganho de 40% de velocidade durante o desenvolvimento em comparação com o nativo, e a tendência é que essa velocidade só aumente conforme ganhamos mais maturidade com a plataforma, permitindo não só a entrega mais rápida de features como também mais tempo disponível pra nos dedicarmos nas funcionalidades do aplicativo, nos testes e garantir a melhor experiência possível pros usuários.

--

--