跳到正文

视图

View::render 会在你调用 invalidate 或操作系统请求重绘后构建界面。使用 id,让行在多次 render 之间保持身份。

#视图如何工作

从 render 返回 impl IntoElement。窗口会休眠,直到 invalidate 或平台事件到来。

#条件内容

if self.expanded {
    text("Expanded content")
} else {
    text("Collapsed")
}

省略某个分支会丢弃那些节点。

#列表

div().children(self.items.iter().map(|item| {
    text(item.name.as_str()).id(item.id)
}))

给有状态的行稳定的 id。长列表请使用 VirtualList 或 Table。

#窗口生命周期

每次 open_window 都拥有独立的 View。关闭一个窗口不会丢弃其他窗口。处理 Dock 图标时,如果 has_visible_windows 为 false,就打开新窗口。

#当前窗口

fn render(&mut self, cx: &mut ViewContext<'_, Self>) -> impl IntoElement {
    let close = cx.listener("close", |_this, cx: &mut EventContext| {
        let _ = cx.close_window();
    });
    button().on_click(close).child("Close")
}

#测试

quickgui check
quickgui test

examples/base_ui_components.rs 是 UI 画廊。启用 inspector crate feature 可使用应用内检查器。