3个版本 (重大变更)
0.3.0 | 2022年1月4日 |
---|---|
0.2.0 | 2021年12月27日 |
0.1.0 | 2021年12月26日 |
#23 in #高级
每月22次下载
在 3 个crate 中使用
15KB
296 行
什么是agui?
Agui是一个高级反应式GUI项目,灵感来源于Flutter,并借鉴了其他相关UI系统的某些概念。
[!IMPORTANT] 这个库正在进行大规模的重构,因此目前尚不能进行技术实现。文档也非常过时,将在工作接近完成时更新。
🛠️ 安装
Agui可在crates.io(Rust的官方包仓库)中找到。只需将以下内容添加到您的Cargo.toml
文件中
[dependencies]
agui = "0.3" # ensure this is the latest version
🚀 使用
agui
的文档正在开发中,但您可以查看examples
目录以获取基本设置,以及agui_primitives/
agui_widgets
以获取许多小部件创建示例。
创建新小部件
目前,小部件是通过使用StatelessWidget
、StatefulWidget
、LayoutWidget
、PaintWidget
和InheritedWidget
派生宏以及实现它们各自的特质来创建的。
#[derive(Default, StatelessWidget)]
pub struct MyWidget {
// Widget is the convention for passing children. Vec<Widget> should be used for passing variable amounts.
pub child: Widget,
}
impl StatelessWidget for MyWidget {
fn build(&self, ctx: &mut StatelessBuildContext<Self>) -> Widget {
build! {
<Button> {
// Widgets are stored as Rcs, so cloning has little overhead
child: self.child.clone(),
}
}
}
}
什么是build!
?
build!
宏使初始化新小部件变得更加简洁和容易。它为小部件创建提供了类似结构的语法,并且是构建界面的推荐方式。
use agui::macros::build;
fn build(&self, ctx: &mut StatelessBuildContext) -> Widget {
build! {
<Button> {
color: Color::from_rgba((1.0, 0.0, 1.0)),
child: <Text> {
text: "A Button"
}
}
}
}
// is equivalent to:
fn build(&self, ctx: &mut StatelessBuildContext) -> Widget {
Button::builder()
.color(Color::from_rgba((1.0, 0.0, 1.0)))
.child(
Text::builder()
.text(String::from("A Button"))
.build()
.into_widget()
)
.build()
.into_widget()
}
🤝 贡献
欢迎贡献,非常欢迎。如果您愿意,请查看问题页面!
请在提交更改之前,请查看现有问题和拉取请求,以确认是否有人正在处理它。同时,确保运行cargo test
!
依赖项
~2MB
~42K SLoC