Pular para o conteúdo
Skillpedia
Sites e telas (frontend)48 mil · #3527

makepad-2-0-events

Ajuda seu agente a lidar com eventos no Makepad 2.0. É importante ao criar ou corrigir o código da interface do usuário (UI) feito com Makepad.

O que ela faz

Este guia explica como o Makepad 2.0 lida com interações do usuário, como cliques e digitação. Ele mostra como conectar essas ações a funções no código para que o programa reaja corretamente.

Quando usar

  • ✓Quando você quiser que um botão execute uma ação.
  • ✓Quando precisar que o programa reaja ao pressionar Enter em um campo de texto.
  • ✓Ao criar listas de itens que podem ser atualizadas ou removidas.

Exemplo do que pedir para a IA

“Como faço para que um botão salve as informações de um campo de texto?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/makepad-2-0-events/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/makepad-2-0-events/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O Makepad usa dois 'lugares' para lidar com eventos: um direto no código visual (Splash) e outro mais complexo em Rust. O código visual é mais simples para ações diretas, enquanto Rust cuida de tarefas mais pesadas.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill makepad-2-0-events

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/makepad-2-0-events/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Limitações

  • Verifique com a documentação atual do Makepad 2.0; as APIs de upstream mudam frequentemente.
  • Não execute scripts empacotados sem aprovação explícita do usuário.

Quando Usar

  • Use quando este fluxo de trabalho de upstream corresponder ao objetivo declarado do usuário.
  • Use quando a tarefa exigir os procedimentos documentados nesta habilidade.

Sistema de Eventos e Ações do Makepad 2.0

Visão Geral

O Makepad 2.0 usa um sistema de eventos de duas camadas:

  1. Camada Splash -- Manipuladores de eventos inline escritos diretamente no código script_mod! Splash (on_click, on_render, on_return, on_startup). Eles manipulam interações da UI declarativamente dentro do script, perto das definições dos widgets.

  2. Camada Rust -- O trait MatchEvent com handle_actions, handle_timer, handle_http_response, etc. Eles manipulam a lógica de negócios, I/O externo e qualquer coisa que precise do poder total do Rust.

Ambas as camadas se comunicam através de duas macros de ponte:

  • script_eval!(cx, { ... }) -- Executa código Splash a partir do Rust (atualiza estado, aciona renders)
  • script_apply_eval!(cx, widget_ref, { ... }) -- Corrige propriedades de widgets a partir do Rust em tempo de execução

1. Manipuladores de Eventos Inline do Splash

Os manipuladores de eventos são anexados diretamente aos widgets dentro de blocos script_mod!. Eles usam sintaxe de closure com || para nenhum argumento ou |arg| para callbacks que recebem um valor.

on_click -- Clique de Botão/Widget

Dispara quando o usuário clica em um botão ou widget clicável. Nenhum argumento para botões simples, ou |checked| para CheckBox, que passa o novo estado booleano.

// Plain button click
add_button := Button{
    text: "Add"
    on_click: ||{
        let text = ui.todo_input.text()
        if text != "" {
            add_todo(text, "")
            ui.todo_input.set_text("")
        }
    }
}

// CheckBox click with checked state argument
check.on_click: |checked| toggle_todo(i, checked)

// Inline delete with closure capturing loop variable
delete.on_click: || delete_todo(i)

// Calling another widget's click programmatically
clear_done := ButtonFlatter{
    text: "Clear completed"
    on_click: ||{
        todos.retain(|todo| !todo.done)
        ui.todo_list.render()
    }
}

on_render -- Renderização Dinâmica

Dispara quando .render() é chamado na view alvo. Este é o mecanismo principal para conteúdo dinâmico. O corpo substitui o conteúdo de desenho anterior da view.

main_view := View{
    width: Fill
    height: Fill
    on_render: ||{
        counter_label := Label{
            text: "Count: " + state.counter
            draw_text.text_style.font_size: 24
        }
    }
}

// List rendering with for loop and per-item event handlers
todo_list := ScrollYView{
    width: Fill height: Fill
    new_batch: true
    on_render: ||{
        if todos.len() == 0
            EmptyState{}
        else for i, todo in todos {
            TodoItem{
                label.text: todo.text
                check.active: todo.done
                check.on_click: |checked| toggle_todo(i, checked)
                delete.on_click: || delete_todo(i)
            }
        }
    }
    EmptyState{}
}

Ponto chave: on_render NÃO é chamado automaticamente. Você deve chamar ui.widget_name.render() para acioná-lo. A propriedade new_batch: true em uma view diz ao sistema para limpar o conteúdo de desenho anterior antes de renderizar novamente.

on_return -- Tecla Enter do TextInput

Dispara quando o usuário pressiona Enter/Return dentro de um TextInput. Comumente usado para enviar formulários.

todo_input := TextInput{
    width: Fill height: 9. * theme.space_1
    empty_text: "What needs to be done?"
    on_return: || ui.add_button.on_click()
}

on_startup -- Inicialização do App

Dispara uma vez quando o aplicativo inicia. Definido no nível Root. Comumente usado para acionar renders iniciais.

ui: Root{
    on_startup: ||{
        ui.main_view.render()
    }
    main_window := Window{
        // ...
    }
}

Capacidades do Manipulador de Eventos

Dentro dos manipuladores de eventos você pode:

  • Chamar funções Splash: add_todo(text, "dev")
  • Ler valores de widgets: let text = ui.todo_input.text()
  • Definir valores de widgets: ui.todo_input.set_text("")
  • Acionar re-renders: ui.todo_list.render()
  • Acionar outros cliques de widgets: ui.add_button.on_click()
  • Modificar variáveis de estado: state.counter += 1
  • Usar métodos de array: todos.push({text: "new", done: false})
  • Usar fluxo de controle: if text != "" { ... }

2. Manipulação de Eventos Rust -- Trait MatchEvent

O trait MatchEvent é o despachante de eventos do lado Rust. Ele recebe eventos da plataforma

…

Perguntas frequentes

O que é um 'evento'?

Um evento é uma ação que acontece, como um clique do mouse, o pressionar de uma tecla ou o carregamento do programa.

O que é 'Splash'?

Splash é a linguagem usada no Makepad para descrever a aparência e o comportamento básico da interface do usuário, de forma mais simples que o Rust.

Por que preciso chamar `.render()`?

Chamar `.render()` é como dizer ao Makepad para redesenhar uma parte da tela, atualizando o que o usuário vê com as novas informações ou mudanças.

Detalhes

Descrição original do autor

Makepad 2.0 guidance for events; use when building or debugging Makepad UI code.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#3527
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas