Flutter vs Nativo em desenvolvimento mobile

Roberto Cunha
5 min readMay 18, 2020

--

Introdução

Recentemente, Flutter se tornou uma estrela em ascensão no desenvolvimento de aplicativos e pareceu muito promissor mas não quis me apaixonar por esse novo framework pois já tinha ficado desapontado com Xamarin/React Native. Minha experiência com esses dois frameworks multi-plataforma me fizeram acreditar que desenvolvimento nativo é a única opção. Porém, como não aguentava mais escrever o mesmo código duas vezes para iOS e android fiz minhas pesquisas sobre esse novo framework e decidi tentar.

Eu sei que tomar decisões tecnológicas é divertido mas, ao mesmo tempo, um processo doloroso. Para ajudar vocês a tomarem as melhores decisões, compartilharei meus pensamentos e experiências com Flutter comparado com desenvolvimento Nativo tanto para iOS quanto para Android.

Curva de aprendizado

Flutter utiliza Dart como principal linguagem de programação. Dart não é difícil de se acostumar se você já está familiarizado com Java e Javascript. Eu senti que Dart é menos produtivo e com um estilo mais antigo se comparado com Swift/Kotlin. Também, alguns dos seus conceitos e funcionalidades são difíceis de entender.

Outra questão é: Você tem que escrever código para UI e sim, é a única opção que você tem. Não existe XML, Storyboard ou construtor de interface.
Porém, é aí que o Flutter brilha.
Se você escreve códigos para UI, fica muito mais fácil resolver conflitos de merge e o gerenciamento de estado fica muito mais limpo.
Se você tem alguma experiência com SwiftUI ou React Native, será muito fácil para você se acostumar.
Mesmo se você não estiver acostumado a escrever códigos para UI, recomendo que tente pelo menos uma vez programação declarativa de UI, como FLutter e React. É uma tendência e vai introduzir você à um novo mundo de programação de interface. Não se preocupe, é bem simples.

Porém, gerenciamento de estados em Flutter é onde a maioria das pessoas ficam presas se elas vem de desenvolvimento nativo.
Existem várias abordagens para gerenciamento de estado e você precisará gastar um bom tempo lendo sobre Stateful Widget, BLoC e Provider para entender bem.

Não vou dizer que a curva de aprendizado é baixa mesmo se você tiver diferentes backgrounds. Entretanto, eu pessoalmente curti a curva de aprendizado do Flutter e sua documentação é aparentemente fácil e bem feita.

Produtividade

Uma vez que você esteja familiarizado com Flutter, Ele é o campeão em produtividade.

Nós gastamos a maior parte do tempo esperando por builds no desenvolvimento nativo. Um grande projeto iOS normalmente demora mais de um minuto para compilar e no Android é ainda pior.
A compilação incremental e a compilação instantânea aumenta muito a velocidade mas ainda sim é muito lenta se comparada com Flutter e React Native. Com o hot-reload do Flutter, a compilação só demora alguns segundos.

Uma vez que engenheiros podem simplesmente escrever uma vez e rodar o app tanto no iOS como no Android, é fácil dobrar a produtividade.
Escrever o mesmo código duas vezes é um processo mais lento e chato e essa é a principal razão das pessoas procurarem por frameworks multi-plataformas como o Flutter. Embora nós precisemos gastar algum tempo extra escrevendo códigos de UI se nós precisarmos de estilos de interfaces diferentes para cada plataforma, ainda sim é MUITO melhor que escrever o aplicativo todo duas vezes.

Obviamente, existem algumas desvantagens em usar Flutter. Google lançou a primeira versão oficial do Flutter em 2018 e é muito recente comparado com o desenvolvimento nativo.
Tem 2 grandes problemas com a imaturidade do Flutter e eu me peguei lutando contra esses problemas. Existem muitas coisas no Flutter que não temos que nos preocupar quando desenvolvemos nativamente. WebView é um exemplo de que o Flutter tem muitos problemas e existem mais de 5.000 questões não resolvidas no seu Github.
Outro problema é que o Flutter e o Dart tem muito menos bibliotecas open source comparados com iOS e Android nativos.
Não se esqueça que reinventar a roda pode ser bem exaustivo. Porém, eu vejo essas problemas melhorando conforme a comunidade for crescendo.
Eu não me preocuparei com esses problemas no longo prazo.

Performance

É difícil comparar já que existem vários fatores que impactam na performance.
Uma coisa para se ter em mente é que o Flutter não é apenas uma camada sobre um aplicativo nativo. Ele também traz uma nova arquitetura.
Alguma vezes, aplicativos Flutter terão um desempenho melhor, outras, pior. Entretanto, não espero que aplicativos Flutter tenham um desempenho melhor que Android e iOS já que esses colocam muito mais esforços em otimizar a performance há pelo menos 10 anos.

Teoricamente, um aplicativo nativo sempre terá um desempenho melhor na maioria dos casos, se tudo for feito corretamente. Mas se você entender o Flutter e usá-lo corretamente, o desempenho será bom o suficiente.
Flutter promete um consistente 60 FPS (Frame por segundo). Isso significa que ele terá um bom desempenho para exibir animações suaves e uma Interface limpa.

Conclusão

Após ler a seção acima, você pode pensar que Flutter é a grande escolha para seus projetos. Porém, nem sempre é verdade. Nos casos a seguir, você ficará feliz em passar o bastão para desenvolvimento nativo tanto em iOS quanto em Android:

  1. O app para tvOS, WatchOS, CarPlay e Android Auto
    Você não pode desenvolver um aplicativo Flutter para essas plataformas
  2. Apps que utilizam muitas bibliotecas de terceiros
  3. Apps que precisam de uma grande equipe para desenvolver e manter
    Ainda é difícil encontrar bons engenheiros de Dart/Flutter
  4. Apps que precisam muito de WebViews
    WebView do Flutter é limitada e tem muitos problemas de performance.
  5. Apps que precisam de um tamanho pequeno de arquivo
    Um simples app Hello World tem 4.7Mb em Flutter e 550Kb em plataformas nativas.

Mesmo assim, eu recomendo o uso do Flutter. Comecei minha carreira como Engenheiro Android e agora estou trabalhando como engenheiro iOS. Porém, eu honestamente não vejo razões para não utilizar Flutter para aplicativos CRUD.

Experimente Flutter!

Créditos

Esse é um projeto pessoal que estou desenvolvendo para ajudar a comunidade de desenvolvedores brasileiros. Traduzo algumas postagens feitas em inglês para que mais pessoas tenham acessos à conteúdos de qualidade.
Essa postagem foi feita originalmente por Sung Woo Chang e esse é o link da postagem original:
https://medium.com/@iamsungchang/flutter-vs-native-for-mobile-development-4f92e4d2203b

Thanks Sung Woo Chang! Greate job!

--

--