3个版本 (重大变更)

0.3.0 2022年1月4日
0.2.0 2021年12月27日
0.1.0 2021年12月26日

#23 in #高级

每月22次下载
3 个crate 中使用

MIT/Apache

15KB
296

Logo
一个高级、反应式的Rust UI库
报告错误 · 请求功能 . 提问


什么是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以获取许多小部件创建示例。

创建新小部件

目前,小部件是通过使用StatelessWidgetStatefulWidgetLayoutWidgetPaintWidgetInheritedWidget派生宏以及实现它们各自的特质来创建的。

#[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