Sabe-se que é muito bom para um programador ser preguiçoso , porque fazer mais com menos é a chave para o progresso . Ninguém gosta de fazer a mesma coisa repetidamente. Isso é cansativo, chato e nada criativo. Repetindo a mesma ação, geralmente cometemos erros, mas, felizmente, existem aqueles que são realmente bons e eficazes na execução de tarefas semelhantes. E estes são COMPUTADORES !

Hoje, a geração de código é a capacidade de fazer o trabalho no menor tempo possível . A idéia básica é simples: encontrar um padrão nas mesmas e entediantes seções do código que precisam ser escritas repetidamente, crie uma ferramenta para geração, execute-a e veja como a mágica acontece!
No mundo do desenvolvimento do Android, essas ferramentas são bem conhecidas de todos os desenvolvedores. Isso é Retrofit, Dagger e Room. E o Dart? E não uma questão menos importante: o que precisamos para criar nossas próprias ferramentas para geração de código?
Geração de dardo e código: ferramentas acessíveis
Para criar uma ferramenta para geração de código, precisamos dos dois pacotes a seguir:
source_gen
Este pacote fornece uma API conveniente para gerar código. Esta é uma abstração de alguns pacotes Dart de baixo nível, como analisador e compilação . Embora o uso deste pacote seja opcional, ele pode salvá-lo de muitas dificuldades.
source_gen fornece duas classes geradoras abstratas que seguem o padrão Visitor :
Generator
: ao herdar essa classe, todos os elementos do seu código serão visitados. Assim, você tem controle total sobre o que fazer com cada nó ou elemento visitado.GeneratorForAnnotation
: essa classe é semelhante a um gerador simples, mas quando você herda essa classe, também especifica "anotação". Portanto, apenas os nós anotados com esta anotação serão visitados. O restante do código será ignorado.
Você também precisa configurar o Builder
, que será um invólucro sobre o gerador. Existem três opções:
- Se você deseja escrever um trecho de código
partial
, escolha SharedPartBuilder
. "part" permite dividir a biblioteca em vários arquivos Dart. SharedPartBuilder
cria um arquivo com a extensão .g.dart
. - Você também pode usar o
PartBuilder
se quiser usar a abordagem "parte", mas precisar de mais controle sobre a extensão do arquivo gerado, por exemplo .my_file.dart
. - Se você deseja gravar uma biblioteca independente que possa ser importada, use o
LibraryBuilder
.
build_runner
Essa ferramenta permite executar o gerador na fase de desenvolvimento. Pode ser chamado a partir da linha de comando:
pub run build_runner <command>
No lugar de <command>
pode estar:
build
: inicia a geração uma vez.watch
: inicia um daemon que rastreia alterações nos arquivos e inicia a geração quando necessário.serve
: semelhante ao watch, mas começa como um servidor de desenvolvimento.test
: inicia a geração uma vez, cria um diretório de saída compartilhado e depois executa o pub run test --precompiled <merged-output-dir>
.
Para que o source_gen
funcione, você também deve criar um arquivo buil.yaml
, que indica os detalhes da configuração do gerador de código.
Usando geração de código no Dart
A geração de código é usada em muitas bibliotecas conhecidas do Dart:
Mais ...
A segunda parte mostrará como usar anotações e geração de código para rastrear todos os TODO
no aplicativo.