声明式 UI
Ribir 使用基于 Rust 宏的声明式 DSL(领域特定语言)来定义用户界面。这使您能够描述 UI 应该是什么样子,而不是 如何 一步步构建它。
fn_widget! 宏是这个 DSL 的核心。
fn_widget! 宏
fn_widget! 是编写 Ribir UI 代码的入口点。它将 DSL 语法转换为构建 Widget 树的实际 Rust 代码。
use ribir::prelude::*;
fn main() {
App::run(fn_widget! {
@Text { text: "Hello!" }
});
}
使用 @ 创建 Widget
要实例化一个 Widget,请使用 @ 符号后跟 Widget 的类型名称。属性在花括号 {} 内使用标准的 Rust 结构初始化语法 key: value 定义。
当 @ 直接跟随一个类型时,它会调用相应的 Builder 来构造对象。这个 Builder 通常由 #[declare] 宏生成,从而支持内置属性的使用。我们将在 内置属性和 FatObj 部分详细探讨这一机制。
重要: @ 运算符是 DSL 专用的,只在支持 Ribir DSL 语法的宏中有效,如 fn_widget! 和 rdl!。在这些宏之外,该运算符不是有效的 Rust 语法,如果在常规 Rust 代码或第三方宏中使用,将导致编译错误。
use ribir::prelude::*;
fn example() -> Widget<'static> {
fn_widget! {
@Text { text: "I am a Text widget" }
}.into_widget()
}