Categorias

React Native vs Flutter: qual é o melhor?

Quando publicamos um comparativo entre Flutter e Xamarin, um dos comentários mais frequentes em nossas redes sociais foi que React era melhor. A lembrança espontânea comprova que o framework para desenvolvimento multiplataforma tem um público fiel, capaz de defendê-lo sempre que surge a oportunidade.

Esse mercado competitivo é um reflexo do crescimento astronômico da necessidade de se desenvolver para diferentes ambientes móveis ou até mesmo buscar uma solução que integre o tradicional e cada vez mais vetusto desktop com o onipresente dispositivo móvel. Desenvolver de tal forma que o mesmo produto funcione em múltiplos ambientes é uma meta a ser alcançada, com caminhos que ficam ao gosto do freguês, como tem sido em todos os cantos da programação. Onde houver uma linguagem, um método, haverá outro concorrente de peso igual, com suas vantagens e desvantagens, seus defensores e seus detratores.

Chegamos então ao cenário atual: muitos frameworks multiplataformas disponíveis e as comparações são inevitáveis. Hoje, vamos ver como React Native e Flutter se comportam e se ajustam para diferentes necessidades.

Origens e mercado

O React Native foi criado e apresentado pelo Facebook pela primeira vez em 2015. Ele é um framework Javascript para desenvolvedores móveis interessados em construírem aplicações multiplataforma, que funcionem tanto em iOS, quanto Android, de forma nativa (por isso o nome). A ideia, presente no seu slogan até hoje é “aprenda uma vez, escreva em qualquer lugar”. Desenvolvendo em React Native é possível se obter aplicativos móveis que são, em termos práticos, indistinguíveis daqueles que foram desenvolvidos nativamente em Swift, Objective C ou Java, as linguagens ditas oficiais para os dois ecossistemas. Através de componentes internos e APIs, ele se tornou essencial para desenvolvedores móveis rapidamente.

O Flutter é mais jovem: foi introduzido em maio de 2017 e nasceu de uma iniciativa do Google, dono de uma das duas plataformas móveis líderes de mercado. Seus objetivos são similares: entregar um framework de código aberto que permita que desenvolvedores construam aplicações móveis multiplataforma que se comportem como aplicações nativas de seus ambientes. Porém, ao contrário do React, o Flutter adota uma linguagem própria chamada da Dart.

Sendo uma solução mais madura baseada em uma linguagem de programação muito bem estabelecida, o React Native acabou sendo logo adotado como solução preferencial em gigantes da indústria, como Tesla, Uber, Walmart e muitas outras. Evidentemente, o Google correu atrás do prejuízo e o poder de sua marca ajudou a impulsionar o Flutter para uma posição bastante confortável e o framework também foi adotado em empresas de renome, como Tencent, Square e o The New York Times. O próprio Google confia no seu produto para impulsionar o seu Google Assistant e os aplicativos e serviços que orbitam ao seu redor.

Javascript x Dart

A verdadeira diferença entre os dois frameworks está na linguagem adotada. A disputa entre React Native e Flutter é uma disputa entre Javascript e Dart. Apesar de toda a emergente popularidade do Fluter, o Dart não é muito utilizado ou conhecido fora dos corredores do Google, dada sua relativa idade (surgiu em 2011). Pelo menos, não há como comparar com a hegemonia do rival: em 2018, o veterano Javascript era apontado como a linguagem de programação mais popular e mais utilizada do planeta, segundo o levantamento anual realizado pelo Github. É impossível  competir nesse aspecto.

O primeiro obstáculo, então, para a adoção do Flutter é aprender Dart. Aprender uma nova linguagem é uma prática estimulante e recomendada, mas na correria do dia a dia nem sempre é plausível. Além disso, do ponto de vista de empresas em busca de novos profissionais, a oferta de desenvolvedores com experiência em Javascript é abundante e é possível escolher de uma seleção muito maior de talentos.

Outra dificuldade enfrentada pelo Dart é que o Javascript traz um suporte superior por parte de navegadores, servidores e ambientes móveis, um espaço que ainda precisa ser conquistado.

Performance

Em contrapartida, tecnicamente falando, Flutter é mais rápido que o React Native, a partir do momento em que ele não exige que o Javascript faça uma ponte para interagir com os componentes nativos do sistema. O uso do Dart oferece ao framework do Google uma vantagem que pode ser considerada injusta, já que ele é o dono de um dos parquinhos. A camada extra de abstração do React Native o coloca atrás nessa corrida invisível

Entretanto, para cenários cotidianos, essa diferença de performance é irrelevante. Conforme já havíamos discutido ao comparar Xamarin e Flutter, há fatores muito mais importantes para impactar a velocidade do aplicativo do que o framework adotado.  Práticas aplicadas no código em qualquer um dos caminhos de desenvolvimento e o uso adequado das ferramentas e recursos que os dois frameworks oferecem podem produzir aplicações extremamente velozes em ambos os casos ou afundar um projeto, independente da solução empregada.

Estrutura de código e tempo de desenvolvimento

Se você perguntar para desenvolvedores de React Native eles vão afirmar que o framework oferece uma estrutura de código melhor que a do Flutter. Por exemplo, se for necessário separar estilos no Flutter, o programador deverá criar um estilo individual in-line para cada componente criado, o que não é o melhor dos cenários mas tampouco poderia ser considerado um ponto negativo. Nesses casos, é uma questão bastante opinativa, com argumentos válidos para ambos os lados.

É claro que é preciso sempre se levar em conta que desenvolvedores, independente da empresa ou da tecnologia adotada, estão constantemente trabalhando sobre a pressão de um cronograma que nunca é folgado. Então, o tempo de desenvolvimento é uma fator crítico e escolher um framework que agilize processos pode ser fundamental. Nesse sentido, React Native traz componentes prontos para uso, que aceleram a criação de aplicações multiplataforma. Por outro lado, o Flutter traz um amplo leque de ferramentas para teste e debug.

Qual é o melhor?

Se olharmos friamente, ambas as soluções são tecnologias relativamente novas. E ambas são indispensáveis, a partir do momento que ajudaram a quebrar um paradigma anterior. É preciso entender que tanto React quanto Flutter romperam com a divisão que existia antes, quando era necessário decidir se determinado aplicativo seria desenvolvido para iOS ou para Android ou contratar duas equipes distintas para produzir projetos paralelos. Nos últimos anos, um único time pode desenvolver para os dois ecossistemas, sem prejuízos e sem que o cliente precise decidir em qual plataforma seu produto estará disponível.

Entretanto, a cisão que havia antes, agora virou uma cisão com mais facetas. Não apenas React e Flutter, mas também Xamarin.

A tendência atual do mercado aponta para uma vitória do React Native, extremamente popular entre desenvolvedores. A partir desse framework, é possível ter acesso a muitas bibliotecas, tanto nativas quanto fornecidas por terceiros, essas últimas frutos de uma oferta incentivada justamente por sua popularidade. A partir desse volume de profissionais e soluções, advém também um enorme suporte da comunidade.

Isso não significa uma derrota definitiva para o Flutter e muito menos que ele deva ser menosprezado por iniciantes e veteranos. O Flutter está crescendo e sua adesão também, formando uma comunidade que pode não ser ainda tão grande quanto a de seus rivais, mas que não é por causa disso menos solícita ou integrada.