GenUI: Como a IA Gera Interfaces Flutter em Tempo Real
Home » Inteligência Artificial  »  GenUI: Como a IA Gera Interfaces Flutter em Tempo Real
Descubra o GenUI, SDK que permite que agentes de IA criem interfaces Flutter nativas dinamicamente, transformando a experiência do usuário.

O que é GenUI?

O GenUI (Generative UI) é o SDK do Google para Flutter que permite que agentes de IA gerem interfaces em tempo real. Diferente de chatbots que retornam apenas texto, o GenUI permite que a IA crie interfaces Flutter nativas — cards, formulários, gráficos, listas e muito mais — tudo de forma dinâmica.

Apresentado no Google I/O 2026, o GenUI representa uma mudança fundamental: a IA não apenas responde, mas constrói a interface que melhor atende ao usuário.

Como Funciona?

O GenUI usa um catálogo fechado de widgets Flutter que a IA pode selecionar e parametrizar. O processo é:

  1. Usuário faz uma pergunta — "Mostre produtos de tecnologia"
  2. IA analisa a intenção — Entende que precisa mostrar uma lista de produtos
  3. IA gera JSON — Descreve quais widgets usar e com quais parâmetros
  4. Flutter renderiza — Converte o JSON em UI nativa

Arquitetura

1. Catálogo de Widgets

O GenUI vem com um conjunto pré-definido de widgets que a IA pode usar:

  • CardWidget — Cards com título, descrição e imagem
  • ListWidget — Listas com itens
  • ChartWidget — Gráficos simples
  • FormWidget — Formulários com campos
  • MapWidget — Mapas
  • ImageWidget — Imagens
  • TextWidget — Textos formatados

2. Protocolo A2UI

O GenUI usa o protocolo A2UI (Agent-to-UI) para comunicação entre IA e interface. É um formato JSON declarativo que descreve a estrutura da UI.

3. Integração com Modelos

O GenUI funciona com modelos Gemini que foram treinados para gerar UI Flutter válida.

Como Começar

1. Instalação

dependencies:
  genui: ^latest
  genui_firebase_ai: ^latest  # Para usar com Firebase AI Logic

2. Configuração Básica

import 'package:genui/genui.dart';
import 'package:genui_firebase_ai/genui_firebase_ai.dart';

class MyGenUIScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GenUI(
      ai: FirebaseAIGenUI(
        model: 'gemini-2.0-flash',
      ),
      builder: (context, ui) {
        // ui é o widget Flutter gerado pela IA
        return Scaffold(
          body: SingleChildScrollView(
            child: ui,
          ),
        );
      },
    );
  }
}

3. Criando um Chat com GenUI

class GenUIChat extends StatefulWidget {
  @override
  _GenUIChatState createState() => _GenUIChatState();
}

class _GenUIChatState extends State<GenUIChat> {
  final TextEditingController _controller = TextEditingController();
  final List<ChatMessage> messages = [];
  final GenUIController _genUI = GenUIController();

  Future<void> sendMessage() async {
    final text = _controller.text;
    
    setState(() {
      messages.add(ChatMessage(text: text, isUser: true));
    });

    // A IA vai gerar UI em resposta
    final response = await _genUI.generate(
      prompt: text,
      catalog: [
        ProductCardWidget(),
        PriceChartWidget(),
        ReviewListWidget(),
      ],
    );

    setState(() {
      messages.add(ChatMessage(widget: response));
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Expanded(
          child: ListView.builder(
            itemCount: messages.length,
            itemBuilder: (context, index) {
              final msg = messages[index];
              if (msg.widget != null) {
                return msg.widget!;
              }
              return ListTile(
                title: Text(msg.text),
              );
            },
          ),
        ),
        TextField(
          controller: _controller,
          onSubmitted: (_) => sendMessage(),
          decoration: InputDecoration(
            hintText: 'Descreva o que você quer ver...',
          ),
        ),
      ],
    );
  }
}

Casos de Uso Práticos

1. Dashboard Dinâmico

// Usuário: "Mostre vendas do mês com gráfico"
// IA gera: CardWidget com título + ChartWidget com dados

final dashboard = await genUI.generate(
  prompt: 'Dashboard de vendas de julho 2026',
  catalog: [
    StatCardWidget(),
    LineChartWidget(),
    BarChartWidget(),
    TableWidget(),
  ],
);

2. Listagem de Produtos

// Usuário: "Quero ver celulares até R$ 2000"
// IA gera: ListWidget com ProductCards filtrados

final products = await genUI.generate(
  prompt: 'Celulares até 2000 reais',
  catalog: [
    ProductCardWidget(),
    FilterWidget(),
    SortWidget(),
  ],
);

3. Formulário Adaptativo

// Usuário: "Preciso cadastrar um cliente"
// IA gera: FormWidget com campos relevantes

final form = await genUI.generate(
  prompt: 'Formulário de cadastro de cliente',
  catalog: [
    TextFieldWidget(),
    DropdownWidget(),
    DatePickerWidget(),
    PhoneFieldWidget(),
  ],
);

Widgets Customizados

Você pode criar seus próprios widgets para o catálogo:

class ProductCardWidget extends GenUIWidget {
  @override
  String get name => 'product_card';

  @override
  Schema get schema => Schema.object({
    'name': Schema.string(),
    'price': Schema.number(),
    'image': Schema.string(),
    'description': Schema.string(),
  });

  @override
  Widget build(BuildContext context, Map<String, dynamic> data) {
    return Card(
      child: Column(
        children: [
          Image.network(data['image']),
          Text(data['name'], style: TextStyle(fontSize: 18)),
          Text('R\$ ${data['price']}',
               style: TextStyle(color: Colors.green)),
          Text(data['description']),
        ],
      ),
    );
  }
}

Segurança

O GenUI é projetado com segurança em mente:

  • Catálogo fechado — A IA só pode usar widgets que você definiu
  • Sem código arbitrário — Não é possível injetar Dart code
  • Validação — O JSON é validado antes de renderizar
  • Sandbox — Widgets rodam em contexto controlado

Limitações Atuais

  • Estado alfa — v0.8, sujeito a mudanças
  • Catálogo limitado — Widgets disponíveis são pré-definidos
  • Tokens extras — System prompt consome 3-5k tokens
  • Latência — Geração de UI é mais lenta que texto simples

GenUI vs Chatbots Tradicionais

  • Chatbot — "Aqui estão os celulares: iPhone, Samsung, Xiaomi..."
  • GenUI — Mostra cards visuais com imagem, preço e botão de compra

A experiência do usuário é significativamente superior com GenUI.

Conclusão

O GenUI representa o futuro da interação entre IA e interfaces. Em vez de apenas ler texto, os usuários poderão interagir com UIs dinâmicas geradas por IA em tempo real. Embora ainda esteja em fase alfa, o potencial é enorme para aplicativos de e-commerce, dashboards, assistentes virtuais e muito mais.

O que você acha da ideia de IA gerando interfaces? Já pensou em usar no seu app? Compartilhe nos comentários!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *