[NextStack] Por que Flutter?

Já escolhemos a linguagem para API, agora é hora de olhar para o framework

Pedro Correa
Accenture Digital Product Dev
6 min readMar 17, 2022

--

Photo by Fahim Muntashir on Unsplash

Nossa intenção criando o NextStack é criar uma stack de desenvolvimento rápido, que consiga não só prototipar projetos, mas também entregá-los com ótimo desempenho e excelente qualidade de código.

Exatamente para reduzir custo e tempo, estamos deixando de lado o desenvolvimento nativo. Não por ser pior ou melhor, mas por não contribuir com a agilidade de desenvolvimento mantendo o custo baixo.

Neste post, vamos fazer algumas reflexões rápidas para a escolha desse framework (Flutter) em comparação com os demais.

Popularidade

Existe uma série de frameworks que atendem esse paradigma multiplataforma, porém os mais populares são o ReactNative e o Flutter.

Flutter está em um crescimento acelerado ano a ano e canibalizando parte do mercado do ReactNative exatamente por resolver problemas que o ReactNative não estava conseguindo resolver em tempo hábil.

Image Source: Statista

O grande problema com ReactNative é a forma com que os pacotes finais são criados. Esse resultado é realmente compilado e otimizado com componentes nativos, mas esse processo é uma transpilação que resulta em um código final diferente do que foi criado.

Com isso, temos o problema que de fato não temos uma base de código única e sim uma base de código que é transpilada para múltiplas plataformas. Por isso, a manutenção do ReactNative é algo a se analisar relato a relato. A performance também é algo que varia bastante com o dispositivo e o OS nos quais você está executando. Além disso, até mesmo os componentes gráficos variam, pois eles utilizam os componentes nativos do OS e não os que foram usados no desenvolvimento.

Por que Flutter?

Flutter tem o funcionamento diferente. Ele é parecido com uma engine de jogos que te dá um motor base (SKIA) e nele você realmente executa o mesmo código em todas as plataformas. O Flutter garante a consistência do motor em todas as plataformas e você apenas se preocupa com o código.

Supporte e Ferramentas

Flutter também vem com uma gama de ferramentas para desenvolvimento. Um recurso que parece simples e bobo e vejo poucos comentários é seu suporte web integrado.

Com isso, apenas com o Flutter e o Chrome você consegue começar a desenvolver um aplicativo que depois pode ser compilado para iOS ou Android. Ou seja, para começar uma prototipagem e fazer experimentos não é necessário baixar grandes SDKs do XCode ou do Android Studio com emuladores pesados e lentos. Apenas um VSCode, Chrome e o SDK do Flutter. Leve, simples e direto.

  • Hot Reload
  • Ambiente replicável, consistente e leve para desenvolvimento
  • Linguagem 100% tipada, o que evita erros de runtime
  • Auto Complete como Intelisense em vários IDEs

REALMENTE multiplataforma

Diferente do ReactNative, que tem o foco em aplicativos mobile, o Flutter foi criado para rodar em qualquer ambiente, seja celular, desktop e até mesmo um navegador.

Com isso, temos a flexibilidade absoluta de criar uma aplicação móvel otimizada para iOS ou Android e disponibilizar a mesma aplicação em um formato web móvel (sem precisar baixar o app, via navegador) ou desktop!

Imagine uma aplicação de planilha muito pesada que você pode compilar para desktop e ter toda a vantagem de execução nativa no seu computador?

WASM

Uma última cartada do Flutter é o seu suporte prévio ao WASM. Devido a sua arquitetura, com um motor por debaixo do framework, é possível que esse motor seja otimizado para novas tecnologias como WASM que executa o codigo arbitrário com performance similar à nativa no navegador.

As possibilidades disso são infinitas. Como no exemplo da aplicação que carrega planilhas e tem grande processamento, com WASM nem sequer precisaríamos que o usuário baixasse o aplicativo, ele rodaria nativamente no navegador com performance máxima!

Dart

Um dos grandes trunfos ocultos do Flutter é sua linguagem praticamente dedicada chamada Dart. Sua vantagem sobre um ReactNative que utiliza Javascript é a orientação a objetos e ser fortemente tipada em simultâneo, flexível.

Como tudo no Flutter são objetos passados para frente, é possível em tempo de código descobrir problemas bobos de tipagem e de implementação de interfaces além, é claro, de evitar esses problemas em runtime, coisas que Javascript tem evoluído com Typescript mas ainda é pouco adotado em aplicações mobile.

Além disso, Javascript já se consolidou como uma solução não performática para aplicativos em ReactNative em celulares pouco potentes devido ao seu grande overhead de execução. A comunidade se esforça muito criando novas formas de otimização estendendo o Javascript com novas funcionalidades como o ahead-of-time para diminuir o tempo de loading, mas mesmo assim essas ações podem ser consideradas paleativas e não uma escolha de arquitetura robusta.

Performance e Otimização

Atualmente, o Flutter usa SKIA como seu motor base. Porém, no futuro, é possível que esse motor evolua para tecnologias mais modernas, permitindo ainda mais performance sem a necessidade de mudança da base de código das aplicações. Esse processo é bem usual no mundo dos jogos, no qual novas engines mais otimizadas sempre são lançadas. Apenas atualizando o motor, são grandes os ganhos de performance.

Outro ponto importante é que devido à arquitetura do motor do Flutter podemos receber atualizações que melhorem a performance, tamanho final do pacote APK/APP e etc. apenas atualizando a versão.

O Flutter tem como foco oferecer aplicativos que rodem em 60fps e até mesmo 120fps para novos celulares com telas de mais refresh rate.

Novamente todas essas preocupações de performance são centralizadas e unificadas no motor que recebe melhorias não só do Google como da comunidade opensource.

Bala de Prata?

Todos os argumentos que levantamos nos convenceram que o Flutter pode ainda não ser uma bala de prata devido a ser uma tecnologia tecnicamente ainda emergente.

Porém, acreditamos que tenha o potencial de resolver uma grande quantidade de problemas em desenvolvimento de aplicativos de vários tipos. Uma prova disso é o uso do Flutter por parte da Canonical no instalador do seu sistema operacional Ubuntu.

Conclusão

O Flutter atende todas as nossas expectativas de uma tecnologia REALMENTE cross-plataform permitindo criarmos até aplicações nativas desktop com performances incríveis além de possuir toda uma comunidade de ferramentas para desenvolvimento e um futuro não só ao nível de comunidade e novas bibliotecas, mas também ao nível tecnológico. Incrível!

ReactNative pode ser considerada uma plataforma mais antiga e consolidada, porém quando paramos para analisar seu funcionamento vemos falhas grandes na arquitetura que limitam o crescimento (ReactNative pouco mudou nos últimos anos).

Temos certeza que ainda faremos grandes descobertas sobre esse framework e vamos compartilhá-las no futuro.

--

--