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: GeratoJson/fromJsonautomaticamente.
🛠 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