Pedro Pires

Flutter – Introdução completa

Segundo o site Statista, é esperado que as aplicações móveis gerem cerca de 189 biliões de dólares em retorno através das Apps Stores e através de anúncios in-app, já no próximo ano de 2020. Hoje em dia, as empresas olham para as aplicações mobile não só como um negócio, mas também como uma forma de fazer publicidade à sua marca, ao mesmo tempo que tentam reduzir significativamente o time-to-market para que possam acompanhar a concorrência.

Atualmente, existem dois grandes sistemas operativos para smartphones: Android e iOS. Juntos, constituem 100% dos aparelhos vendidos no primeiro quarter de 2018. Estas plataformas são diferentes, e, por isso, cada uma tem os seus próprios constrangimentos a nível de design, as suas próprias ferramentas e as suas próprias linguagens de programação, mas cada plataforma cria, apenas, um user interface. Se assim é, porque é que o desenvolvimento nestes dois surfaces deve ser assim tão distinto?

Muitas tecnologias já endereçaram a necessidade que existe de unificar o desenvolvimento para ambas as plataformas, e nomes como a Xamarin da Microsoft ou o ReactNative do Facebook emergiram como soluções de desenvolvimento multiplataforma.

Já a Google, conhecida pelos seus fantásticos produtos, ainda não tinha apresentado nenhum projeto a longo-prazo para o desenvolvimento cross-platform. Até agora. Deixamo-los, então,  com esta introdução ao Flutter, para que fique a conhecer tudo sobre este novo projeto da Google.

1. O que é o Flutter?

Segundo a Google, a empresa por trás deste projeto, o Flutter é uma nova tecnologia que permite a criação de interfaces nativas de alta qualidade em iOS e Android, partilhando a mesma base de código, e utilizando uma linguagem de programação chamada Dart – também desenvolvida pela Google.

Com um SDK open source e gratuito, o Flutter é, neste momento, utilizado por developers e empresas um pouco por todo o mundo, já que funciona através de uma linguagem de programação centralizada e código unificado. Para além disso, o Flutter permite a integração com ambientes de desenvolvimento mais populares e estandardizados, e com ferramentas como o Visual Studio Code e o IntelliJ.

Esta combinação de características permite um desenvolvimento muito mais rápido, um alto desempenho e também uma alta capacidade de manutenção.

2. A timeline do projeto Flutter

Este projeto é recente. Por isso, a timeline não é muito extensa (por enquanto!).

  • No ano de 2015, o projeto arrancou, conhecido pelo nome de ‘Sky’. Corria em Dart e já era capaz de renderizar ecrãs a 120 frames por segundo;
  • No ano seguinte, em 2016, a Google revelou os seus planos e o codebase para um novo sistema operativo (SO), que ficou conhecido por ‘Google Fucshia’. Diz-se que este novo SO pode vir a ser o sucessor do Android para todos os dispositivos, e as suas aplicações serão totalmente escritas em Flutter;
  • Depois de uma fase de maturação, o lançamento inicial aconteceu em 2017. A versão alpha, numerada v0.0.6, ficou disponível ao público e os developers puderam começar a explorar esta tecnologia partir desse momento;
  • Em maio de 2018, durante o evento Google IO, o Flutter foi finalmente lançado na sua fase beta;
  • Mais tarde, em setembro desse ano, a Google lançou a sua segunda preview da versão 1.0.

O Fuschia é, então, o novo sistema operativo com um micro-kernel dedicado, que corre nos mais variados dispositivos, desde sistemas integrados a smartphones, tablets e computadores pessoais. Neste momento, é claro que o Flutter não irá desaparecer tão depressa, já que a Google está constantemente a investir neste projeto, como se pode comprovar pela sua presença nos eventos I/O 2017 e I/O 2018.

3. O que torna o Flutter diferente?

O Flutter não é uma solução completamente inovadora. É, sim, uma nova opção que surge no competitivo mundo do desenvolvimento multiplataforma. Mas que tipo de valor é que o Flutter traz a este ambiente? Existem, claro, alguns pontos de distinção.

Ao contrário de ReactNative, que faz a ponte entre Javascript e código nativo com uma significativa perda de performance, ou Xamarin.Android & Xamarin.iOS, que compila uma única fonte de código em C# com código nativo – exigindo duas construções de UI completamente distintas – o Flutter parece superar as falhas mais comuns dos seus concorrentes. Ignorando interpretações de nível médio, aproveitando a poderosa compilação e utilizando a flexível Skia Graphics Library, o Flutter tem tudo a ver com widgets.

Um widget representa uma área atómica no ecrã e funciona através de lógica por correspondência (por exemplo, Campo de Entrada, Botão, Imagem, Lista). Estes pequenos blocos de construção são rápidos, muito responsivos e customizáveis. Os user interfaces sólidos e de alta qualidade que o Flutter oferece advêm do facto de que é possível combinar, interlaçar e compor widgets com o intuito de obter ecrãs maiores e mais complexos.

Apesar de existirem inúmeros widgets desenvolvidos pela comunidade, a equipa da Google responsável pelo Flutter desenvolve e fornece os mais relevantes. Estes widgets, por norma, são construídos no design de materiais da Google ou para o Cupertino, da Apple.

Outra grande vantagem do Flutter é o hot reload. Esta característica permite que o código seja adicionado de forma incremental e que este seja executado em tempo real, em vez de ter de recompilar o código uma e outra vez, reduzindo o tempo de implementação e também de testes.

Tal como a maioria das tecnologias multiplataforma, o Flutter permite a interação entre a base de código de Dart e os componentes nativos, sejam eles hardware ou bibliotecas existentes. Ao incluir esta possibilidade, o Flutter pode delegar dificuldades, funcionalidades mais dispendiosas para implementações nativas e colecionar os resultados com grande facilidade, para que possam ser ainda mais utilizados pela sua única base de código. Por exemplo, é possível utilizar o serviço de bateria de cada sistema operativo para obter o estado da bateria do aparelho.

3.1. Flutter vs Xamarin

O Xamarin.Android e o Xamarin.iOS permitem ao developer centralizar a lógica do código numa única base em C#. Esta é uma característica muito poderosa que previne a duplicação do código, diminui a possibilidade de bugs, e acelera o processo de output, diminuindo o tempo de desenvolvimento. No entanto, para conseguir obter interfaces de utilizador (UI) dedicados àquela plataforma, o developer deve implementar todo o UI de forma separada para cada plataforma de suporte. O Xamarin.Forms pode ajudar a contornar esta necessidade, mas a implementação de UI nativo é sempre a melhor opção, já que oferece maior flexibilidade. Assim que o código está pronto, é compilado e entra em fase de deployment para a aplicação.

A abordagem do “Write Once Run All” do Flutter é diferente, já que conta com a Skia Graphics Library para renderizar todo o seu UI, imitando os componentes de UI nativos. Tal como a Xamarin, a lógica está centralizada numa única base de código em Dart.

Embora possamos obter um UI “written once” que corre perfeitamente em ambas as plataformas, é recomendada a não combinação de diretrizes de UI específicas de uma plataforma, de forma a prevenir a alienação da experiência do utilizador (UX) – os utilizadores do sistema iOS estão acostumados às aplicações em estilo Cupertino, enquanto os utilizadores de Android utilizam uma gama mais diversificada de estilos. Para minimizar esta questão, o Flutter permite a implementação de diferentes interfaces de utilizador para cada plataforma, tal como a Xamarin.

O processo de desenvolvimento não é apenas baseado na tecnologia multiplataforma, mas sim em todo o ecossistema, incluindo bibliotecas e plugins. A tecnologia Xamarin já se encontra mais estabelecida do que o Flutter neste momento, e portanto, pode contar com o suporte da maior parte dos plugins existentes. No entanto, independentemente do Flutter ter sido desenvolvimento há menos tempo, também conta já com extensas bibliotecas, bem como com ferramentas de desenvolvimento contínuo.

No fundo, aquilo que esta comparação pretende afirmar é que a tecnologia Xamarin é, neste momento, uma opção mais consolidada, sendo que o Flutter, ainda que se encontre em desenvolvimento, está a crescer muito depressa e a aprender com os seus concorrentes como se tornar mais sólido já durante os próximos meses.

3.2. Flutter vs ReactNative

ReactNative é uma tecnologia multiplataforma desenvolvida pelo Facebook e desenhada o desenvolvimento de aplicações para mobile e web. Semelhante ao Flutter, o ReactNative centraliza o seu desenvolvimento num único codebase e permite aos developers escreverem aplicações tanto para Android como para iOS.

Independentemente de partilharem a mesma base de código, o ReactNative apresenta diferenças entre plataformas e permite customizações específicas para cada uma delas. Os developers que trabalham esta tecnologia têm de confiar na utilização de bibliotecas de UI de terceiros, e isto é visto como uma desvantagem quando comparado com os componentes de UI do Flutter.

Esta tecnologia foi construída pelo Facebook para ser uma plataforma robusta, com inúmeras otimizações. Independentemente de ser difícil de extrair, o desempenho das métricas depende das características, algoritmos e componentes, entre muitos outros aspetos.

A consideração mais relevante a fazer é o facto de as aplicações de ReactNative serem desenvolvidas em JavaScript e, por isso, com um mecanismo de JavaScript na sua sustentação, o que faz com que exista uma sobrecarga considerável quando a implementação não é compilada em código nativo.

O ReactNative já está no mercado há alguns anos, o que se traduz, de forma clara, numa solução mais madura e consolidada quando comparada com o Flutter. No entanto, apesar desse pormenor, o Flutter permite a utilização de muitas bibliotecas JavaScript, possibilitando às empresas a colocação de developers tipicamente não-mobile, precisamente em projetos mobile.

Como resultado deste ecossistema em constante mudança, muitas bibliotecas de terceiros foram portadas de bibliotecas nativas, enquanto outras foram criadas especificamente para esta plataforma.

4. Até agora, tudo bem. Mas, e então, onde estão os casos de utilização reais e de negócio?

Apesar de o Flutter ainda se encontrar na sua fase beta, é bastante animador verificar a facilidade de adaptação do SDK, com alguns exemplos high-profile já publicados. Um dos mais populares é a aplicação Hamilton Broadway musical (vencedora de um prémio). Desenvolvida pela Posse Digital, esta app conta com uma extensa base de utilizadores e uma classificação média de 4,5 na Play Store (desde julho de 2018).

Também recentemente, em maio de 2018, o gigante do comércio chinês Alibaba anunciou a adoção do Flutter para o Xianyu, uma das suas principais aplicações, com mais de 20 milhões de utilizadores ativos todos os meses. O Alibaba confia no Flutter pela sua consistência entre plataformas, pela facilidade de geração de código UI a partir das diretrizes do designer, e pelo reduzido tempo de adoção dos developers à tecnologia.

Um portfólio mais extenso e completo de Flutter pode ser encontrado aqui.

5. Por fim, o que podemos concluir?

De facto, nem é justo comparar o Flutter a Xamarin ou a ReactNative, já que as diferenças de maturidade são ainda significativas. No entanto, como consideramos existir um grande potencial nesta tecnologia, continuaremos a investigar, a testar e a comparar. Até porque, com os modernos IDEs à sua disposição, com uma nova linguagem e com um output unificado, é óbvio que esta tecnologia está destinada a conquistar o seu espaço no mundo digital.

Assim que a Google incluir Flutter no Alpha para uma fase beta, as suas hipóteses de crescimento aumentam, atraindo atenção para a comunidade mobile. Já são muitos os mobile experts que encontraram no Flutter aquilo que procuravam: uma opção nova e eficaz. Vamos ver qual a sua evolução – quanto a nós, decididamente que faremos parte daquilo que está para chegar.

Escrito por:

Pedro Pires

Mobile Developer na Xpand IT

André Baltazar

Developer na Xpand IT

José Camacho

.NET Developer na Xpand IT

Pedro PiresFlutter – Introdução completa
read more