Skip to main content

Metaprogramação

🧠 O que é metaprogramação em Dart?

Metaprogramação é a capacidade de um programa inspecionar e modificar sua estrutura durante a execução (reflexão) ou em tempo de compilação (geração de código).


🔍 Reflexão com dart:mirrors

📌 Características:

  • Permite inspeção de tipos, classes, métodos e campos em tempo de execução.
  • Útil para testes, ferramentas CLI, scripts.

⚠️ Limitação:

  • Não é suportado em AOT (Ahead-of-Time) compilation.

    • Portanto, não funciona em apps Flutter rodando no dispositivo (compilados para release).
    • Funciona apenas em Dart VM, como testes ou scripts no terminal.

✅ Exemplo de uso:

import 'dart:mirrors';

class Pessoa {
String nome = 'Ana';
}

void main() {
var pessoa = Pessoa();
var espelho = reflect(pessoa);
print(espelho.getField(Symbol('nome')).reflectee); // Ana
}

🏗️ Alternativa: Geração de código

Como dart:mirrors não funciona em Flutter AOT, usamos ferramentas de geração de código em tempo de build:

🔧 Principais ferramentas:

  • build_runner: Orquestra o processo.
  • source_gen: Framework para escrever geradores.
  • json_serializable: Gera toJson/fromJson automaticamente.

🛠 Exemplo:

()
class Usuario {
final String nome;
Usuario(this.nome);

factory Usuario.fromJson(Map<String, dynamic> json) => _$UsuarioFromJson(json);
Map<String, dynamic> toJson() => _$UsuarioToJson(this);
}

E os métodos fromJson e toJson são gerados automaticamente com:

flutter pub run build_runner build