React Native e Flutter: uma difícil decisão

A experiência de um pequeno time, mas com grandes decisões

William Amaral
5 min readJul 31, 2021
Photo by AltumCode on Unsplash

Quando falamos em desenvolvimento mobile cross-platform, acredito que o primeiro pensamento da maioria das pessoas seja React Native, e não é pra menos, desde 2015 o framework se tornou extremamente popular na comunidade, trazendo uma forma fácil de lidar com o desenvolvimento de aplicações mobile, principalmente para quem vem da web.

Certamente que segui também por essa mesma linha, a única experiência que obtive com desenvolvimento mobile era bastante simplista, já havia desenvolvido algumas aplicações extremamente simples, apenas com o intuito de entender como essa área funciona.

Entretanto recebi uma proposta para trabalhar como desenvolvedor frontend mobile e com a ideia do projeto em mãos, decidi usar o React Native prontamente, justamente por estar mais próximo de minha zona de conforto, pois já possuía experiência com desenvolvimento frontend web na época.

Sondando o terreno

A adaptação inicial ao React Native aconteceu de forma bastante tranquila, só foi necessário dedicar algumas semanas e logo já estava desenvolvendo meu primeiro aplicativo, apenas seguindo tutoriais e artigos pela internet.

Meu primeiro aplicativo utilizando React Native (Créditos do design a Ozi Thohari)

É um projeto bastante simples eu sei, foi implementado com funções básicas de todo aplicativo, algumas telas como a de login acima, alguns componentes reutilizáveis e integração a uma API Rest, no entanto esta simples aplicação me trouxe muitos insights sobre o que eu poderia fazer com React Native e o quanto estava apaixonado pelo framework. Com pouco tempo consegui ótimos resultados e tudo isso sem entender muito bem o mundo de desenvolvimento mobile. Logo após finalizar os testes com o framework (que me cativou rs), decidi utiliza-lo para dar prosseguimento ao desenvolvimento do projeto ao qual fui convidado a trabalhar.

Entretanto, passado algum tempo de desenvolvimento e nosso projeto já com algumas funcionalidades e fluxos definidos, nossa aplicação começou a apresentar comportamentos inesperados, de darem medo em qualquer pessoa desenvolvedora. Os famosos problemas de performance começaram a aparecer logo no início, isso provocou importantes questionamentos.

Se com a aplicação pequena já estava assim, imagine quando começasse a escalar?

Nossa reação ao ver isso

Com esse problema em mãos, fomos em busca de maneiras para melhorar a performance da aplicação, aplicando boas práticas recomendadas na documentação oficial do framework, alguns pontos até foram resolvidos, mas ainda assim não estávamos satisfeitos com os resultados. Outro ponto que ainda nos incomodava, era a dependência do React Native de bibliotecas e implementações de terceiros, o que pode não fazer muita diferença para aplicações de pequeno porte, mas esse não era o nosso caso, tínhamos grandes expectativas de crescimento para o projeto e gostaríamos que o mesmo fosse escalável e manutenível na medida do possível.

E depender de bibliotecas com grandes chances de lidar com breaking changes no futuro não é nada agradável, levando isso em consideração, vimos a necessidade de procurar outras soluções que amenizassem um pouco esses questionamentos. E é exatamente aqui que o Flutter brilha!

Uma possível solução

Dado toda a problematização que enfrentávamos, fomos atrás de um framework que estava agitando bastante a comunidade, o Flutter. Começamos as pesquisas acerca do mesmo e sobre todas as suas possibilidades, os pontos fortes e fracos, enfim, todas as informações que pudessem torna-lo um possível candidato.

Ficamos realmente atraídos por ele, por ser um projeto criado e mantido pelo Google, o que para nós seria muito interessante, dado que nosso projeto é baseado no Material Design da própria empresa e o Flutter já traz consigo uma perfeita sincronia com todo o ecossistema Google. Mas como sabemos, apenas gostar de determinada tecnologia não deve ser o suficiente para escolher usá-la.

Neste caso começamos a procurar por empresas que utilizam o Flutter e como elas trabalham com o mesmo, foi aí que encontramos alguns artigos publicados pelas próprias empresas em que relatavam com detalhes sobre sua experiência de utilização e algumas até estavam migrando de React Native para Flutter e cá entre nós isso nos caiu como uma luva.

Finalizadas as pesquisas de campo, chegou o momento de experimentar por nós mesmos tudo o que a tecnologia tinha a oferecer e inspirados em uma das empresas encontradas na pesquisa, resolvemos implementar uma de nossas features que já possuíamos em React Native no Flutter e tirar disso todas as informações e insights possíveis para uma decisão mais assertiva.

Passado uma semana de intensos estudos e implementações, tínhamos finalmente parte de nossa aplicação em Flutter se comportando de forma bastante satisfatória, e diga-se de passagem obtivemos uma boa experiência de desenvolvimento e benefícios ao utilizar o Flutter. Alguns deles foram a facilidade de compreensão do framework, devido à sua documentação bastante clara e consistente, a agilidade em construir layouts e também um bom suporte da comunidade. E não esquecemos é claro, de uma de nossas maiores dores, a performance da aplicação se mostrou muito bem aceitável em comparação com a outra versão do aplicativo, além de que o Flutter já traz consigo muitas bibliotecas nativas para facilitar o desenvolvimento, diminuindo assim a dependência de terceiros.

Com todo o resultado satisfatório em mãos e ótimos insights, decidimos seguir com a utilização do Flutter em nossa aplicação.

Por fim a conclusão

Estamos chegando ao fim da discussão e posso dizer que nossas expectativas quanto ao uso do Flutter continuam crescendo desde o primeiro contato, a cada momento ele se revela que foi a melhor decisão que podíamos tomar para o nosso contexto naquele momento.

Nesse meio tempo nos deparamos com muitos outros desafios na sua utilização (alguns até nos fizeram quase enlouquecer), como por exemplo, qual gerenciamento de estados utilizar, como tornar a aplicação escalável e diminuir o impacto de dependências externas, entre inúmeros outros. Todos esses questionamentos, nos levaram novamente a pensar em novas abordagens. Foi quando decidimos aplicar os conceito da arquitetura limpa no projeto, elevando assim o seu nível de complexidade, mas trazendo mais segurança para o futuro, mas enfim, este é um longo assunto para outro artigo, não é mesmo?

Em resumo, ambos os frameworks possuem seus pontos fracos e fortes, cada um possui o seu espaço e contexto em que melhor se encaixa, para nós o Flutter se saiu muito bem por n motivos, pode ser que ele seja bom pra você também, ou pode ser que não. Tudo irá depender do que você precisa no momento.

Para você que leu até aqui, muito obrigado pelo dedicação de seu tempo, espero que tudo (ou quase tudo) que foi dito aqui, sirva de algo bom pra você e possa contribuir um pouco mais em seu conhecimento, deixarei aqui algumas sugestões de leitura para você se aprofundar um pouco mais no assunto, até o próximo artigo.

--

--

William Amaral

Software Engineer | Passionate about Technology and Philosophy