Primeiras impressões com Flutter

Recentemente, comecei a me interessar com desenvolvimento mobile, mais precisamente multi-plataforma. Com isso, comecei a olhar quais eram as opções disponíveis. Hoje, existem algumas: Ionic, Xamarim, React Native e, mais recentemente, Flutter. Meu foco agora é Flutter, framework desenvolvido pelo Google, que roda na linguagem Dart. O objetivo desse post é tentar explicar um pouco do framework, e o que tenho achado.

Estou fazendo um curso de Flutter pela Udemy, com o instrutor Leonardo da Cod3r (aliás, recomendo bastante esse curso, ele é um dos melhores professores que já vi online). Atualmente terminei o primeiro projeto, que hospedei no Github, e estou realizando o segundo. Até agora, o foco tem sido na parte gráfica, então não posso comentar muito sobre como organizar a lógica de negócios.

O primeiro ponto a falar sobre o Flutter não poderia deixar de ser a linguagem: Dart. Minha impressão com ela atualmente é que ela tem uma curva de aprendizado muito suave para quem programa em alguma linguagem orientada a objetos. A sintaxe é muito tranquila de entender, com seus construtores, arrow functions, etc. Ela tem tudo que se espera de uma linguagem “moderninha”, e funções são “de primeira classe” (aliás, isso é super relevante no contexto do Flutter). Em resumo, eu nunca tinha visto essa linguagem, mas a sintaxe dela não me é nenhum pouco estranha.

Outro ponto que eu destaco, positivamente, é o plugin do Dart/Flutter pro VS Code. O autocomplete funciona bem, o formatador de código também. O que eu achei curiosos são os comentários gerados automaticamente quando tu fecha um elemento no Flutter. Isso é bastante útil já que o Flutter usa uma abordagem de árvore de componente, que pode causar vários níveis de identação (imagem abaixo).

Comentários gerados automaticamente pelo VS Code, indicando onde termina cada bloco dos widgets
Comentários gerados automaticamente no VS Code

Falando sobre a construção do layout no Flutter, eu gostei: ele usa uma abordagem de árvore componentes. Basicamente (e me perdoem/corrijam se eu estiver falando algo conceitualmente errado), tu tem Widgets complexos (como o Scaffold), que possuem uma propriedade  child/children (dependendo se recebem um único filho ou uma lista). Esse child, por sua vez, também é um Widget, que pode ter seus próprios filhos e assim sucessivamente, até chegarmos em componentes simples como um “Text” ou um “RaisedButton”. Com isso, tu vai cascateando os widgets, do mais genérico até o mais específico.

Ao meu ver, essa abordagem é bastante interessante. Basicamente tu pode criar classes que estendem um Widget (seja ela Stateless ou Stateful), e ir agrupando eles. Na imagem acima dá pra ter uma noção do que estou falando.

Agora, como meu background é no backend, uma questão que sempre é pertinente para mim é a estilização, que sempre é sofrível. No Android, eu estranhava aqueles arquivos .xml com suas declarações estranhas. No Flutter, tu pode estilizar os widgets: no caso do Text, por exemplo, tu tem uma propriedade “style”, que tu passa como parâmetro, por exemplo, um TextStyle e, dentro dele, tem como definir o tamanho, a cor, se será negrito, etc.

Outros componentes têm mais opções de estilização, como o Container: nele, tu pode definir várias propriedades de estilo e posicionamento como propriedades, conforme a imagem a seguir, na qual defini uma margem, bordas e um padding.

Imagem demostrando como colocar margin, padding e bordas dentro de um widget Container
Estilos no widget Container

Como falei anteriormente, ainda estou no começo do meu estudo sobre essa plataforma. Porém, ela tem diversos pontos positivos (ao meu ver). Um ponto que eu quero focar para entender como fica a separação da classe de negócios, interação com o sistema (por exemplo, quero desenvolver um sistema que integre com o despertador do celular), e bibliotecas de terceiros.

Mas por enquanto, Flutter tem me surpreendido positivamente. E você, já usou Flutter? Curtiu? Bora trocar uma ideia sobre.