iced
GUIs reativas inspiradas em Elm em Rust - mensagens explícitas, atualizações imutáveis e widgets nativos.
Busque em todas as páginas da documentação
GUIs reativas inspiradas em Elm em Rust - mensagens explícitas, atualizações imutáveis e widgets nativos.
use iced::widget::{button, column, text};
use iced::Element;
pub fn update(count: &mut i32, message: Message) {
match message {
Message::Increment => *count += 1,
}
}
pub fn view(count: &i32) -> Element<Message> {
column![
text(format!("{count}")),
button("+").on_press(Message::Increment),
]
.into()
}Quando usar isto:
use iced::widget::{button, column, text, Column};
use iced::{application, Element};
#[derive(Debug, Clone)]
enum Message {
Increment,
Decrement,
}
struct Counter {
value: i32,
}
impl Counter {
fn new() -> Self {
Self { value: 0 }
}
fn update(&mut self, message: Message) {
match message {
Message::Increment => self.value += 1,
Message::Decrement => self.value -= 1,
}
}
fn view(&self) -> Element<Message> {
column![
text(format!("{}", self.value)),
button("+").on_press(Message::Increment),
button("-").on_press(Message::Decrement),
]
.into()
}
}
fn main() -> iced::Result {
application("Counter", Counter::update, Counter::view)
.run_with(Counter::new)
}O que isto demonstra:
application conectando update/viewMessage.update modifica o modelo; view reconstrói a árvore de Element.Subscription transmite eventos externos (tempo, teclado).| Peça | Papel |
|---|---|
| Model | Struct de estado do aplicativo |
| Message | Enum de evento |
| update | Transição de estado |
| view | Função de UI |
view grandes - difíceis de manter. Correção: dividir em submódulos que retornam Element.subscription - timers nunca disparam. Correção: conectar application::subscription ao usar fontes assíncronas.Arc para partes somente leitura no modelo.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| egui | Ferramentas de modo imediato | Preferir testes MVU rigorosos |
| Tauri | Equipe de UI web | Não desejar HTML |
| Slint | DSL orientada a designer | Preferir código de widget somente Rust |
| Qt via CXX | Controles nativos maduros | Objetivo de dependência puramente Rust |
Funções update puras são testadas unitariamente sem executar a janela - passe mensagens, afirme o modelo.
Use padrões Command/Task (dependente da versão) para realizar HTTP e mapear o resultado para Message.
Personalização de Theme e métodos style em widgets para cores da marca.
Suportado em APIs avançadas - comece com uma única janela até precisar.
wgpu para aceleração de GPU; renderizador de software para CI e screenshots headless.
Modele rotas como um enum; view corresponde a rota para funções de página.
Armazene erros de campo no modelo; exiba perto dos widgets em view.
Empacotamento e Distribuição para binários de lançamento.
Estado e Arquitetura para MVU + camadas.
iced retido/diff; egui imediato - veja egui.
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026