Criando um MVP com Flutter

Você conhece o Flutter? Eu desenvolvi um MVP inteiro e vou falar um pouco de como foi a experiência.

Posted on

No ínicio do mês de julho recebi uma tarefa aqui na Mocka de desenvolver o MPV do app Team Management que, se bem sucedido, deverá ser um dos novos produtos da empresa no ano de 2019. A task era bem simples: testar se havia interesse de nossos clientes em uma aplicação de gestão de times. Inicialmente a idéia era implementar o MVP apenas para Android, visto que alcançaria um publico maior para validar o conceito e aceitação do app, entretanto, após debater com o time chegamos a conclusão de que esse era o momento perfeito para testar o novo framework de desenvolvimento cross-platform da Google.

Tive meu primeiro contato com Flutter em dezembro de 2018 quando a Google lançou a versão 1.0. Desde então desenvolvi diversas aplicações pessoais sempre acompanhando o desenvolvimento e as novidades do framework. Uma das coisas que sempre achei impressioante foi a facilidade e agilidade no desenvolvimento, fato que atribuo a duas características do Flutter: Hot Reload e a linguagem Dart. Neste artigo não entrarei em detalhes sobre como o framework funciona, irei apenas apontar características dele que fizeram com que o desenvolvimento do Team Management fosse bem sucedido.


Hot Reload

É uma das features mais adoradas pelos desenvolvedores de flutter. Com ela qualquer modificação no código reflete diretamente no device ou simulador quase instantaneamente (~400ms).

Exemplo de hotreload funcionando no VS Code

No nosso projeto ela foi fundamental para o desenvolvimento pois inicialmente não tinhamos um layout definido para o app, apenas os wireframes. Foi durante o desenvolvimento que o Cristian Gars (Designer na Mocka) passou a trabalhar junto comigo sugerindo mudanças no design. Aplicação de cores, formatação, tamanho de letras… Toda a idéia era implementada e em menos de 1s já tinhamos um feedback do aplicativo funcionando diretamente no device. Esse tipo de abordagem era impensável programando em código nativo, visto que cada mudança, seja ela simples ou complexa, levaria no mínimo 1 minuto para ser compilada e executada no device.


Dart

Dart é a linguagem utilizada para o desenvolvimento em Flutter. Ela foi desenvolvida pela Google e lançada em 2011, atualmente se encontra na versão 2.4 e está sob a licença BSD. A linguagem foi adotada devido ao fato de suportar tanto AOT quanto JIT compiler (fundamental para hot-reload), ser altamente produtiva, orientada a objetos e alta performance.

O fato do desenvolvimento em Flutter ser obrigatoriamente em Dart quase foi um impedimento para adotarmos o framework. Como ninguém da empresa programava em Dart isto poderia ser um problema no futuro para dar suporte a aplicação. Entretanto após apresentar melhor a linguagem para equipe ficou claro que o aprendizado da mesma seria muito rápido e quase que transparente para os membros já acostumados com Kotlin e Swift. A maior dificuldade na adaptação seria na caracteristica declarativa da linguagem utilizada para programar o layout das páginas.


Cross-platform

Parte da mágica do Fluter está na grande quantidade de plugins disponíveis para realizar operações em diferentes sistemas (iOS e Android) utilizando o mesmo código em Dart. Estes plugins quase sempre são escritos em código nativo (Java/Kotlin e obj-c/Swift) para cada uma das plataformas de suporte, sendo sempre possível integrar as últimas novidades de cada OS em seu app, basta encontrar um plugin pronto no vasto acervo do Dart Packages ou escrever o seu próprio.

No Team Manager utilizamos diversos plugins para acelerar/facilitar o desenvolvimento, alguns deles são sqflite para escrever e gerenciar o banco de dados SQLite, flutter-local-notifications para notificações locais, imagePicker para pegar fotos da galeria ou da câmera, entre outros. Vale a pena ressaltar que todas essas funcionalidades citadas tem implementações muito diferentes em Android e iOS, mas com a utilização desses plugins se tornam simples e transparentes para o programador, basta incluir o package no pubspec e fazer as chamadas em Dart necessárias.


Conclusão

Começamos a implementação do MVP com certa descrença no framework mas rapidamente elas desapareceram e em 3 semanas lançamos a primeira versão do MVP em beta tanto na App Store quanto na Play Store. Essa experiência com Flutter foi importante para equipe, perdemos o preconceito que tinhamos com frameworks de desenvolvimento cross-platform e adicionamos mais uma ferramenta ao nosso repertório de desenvolvimento.

Apesar de todos os aspectos positivos citados, nem tudo é perfeito. Nos próximos artigos irei comentar sobre os problemas e bugs que encontramos durante o desenvolvimento me aprofundando mais no funcionamento do Flutter.