#declarative-ui #ui-framework #ui #cross-platform-gui #declarative #compose-ui

ribir_widgets

一个非侵入式声明式GUI框架,用于构建现代原生/wasm跨平台应用程序

34个版本 (4个破坏性更新)

0.4.0-alpha.6 2024年8月21日
0.4.0-alpha.32024年6月26日
0.3.0-alpha.12024年3月27日
0.0.1-alpha.52023年7月4日
0.0.0 2023年2月26日

#830 in GUI

Download history 105/week @ 2024-04-29 3/week @ 2024-05-13 15/week @ 2024-05-20 160/week @ 2024-05-27 116/week @ 2024-06-03 114/week @ 2024-06-10 102/week @ 2024-06-17 105/week @ 2024-06-24 8/week @ 2024-07-01 198/week @ 2024-07-29 104/week @ 2024-08-05 118/week @ 2024-08-12

420每月下载量
2 crates 中使用

MIT 许可证

755KB
20K SLoC

Ribir - Rust的非侵入式GUI框架

Ribir-logo

使用Rust从单个代码库构建多平台应用程序。

什么是Ribir?

Ribir是一个Rust GUI框架,帮助您从单个代码库构建美观且本地的多平台应用程序。

体验一种基于您的数据结构API的直接UI开发方法。任何数据突变都将触发精确的UI更新。您的重点应放在设计您的数据结构和其API上。然后,您可以描述数据的UI,而不干扰其逻辑。

初识Ribir

计数器的简单示例

use ribir::prelude::*;
fn main() {
  let counter = fn_widget! {
    let cnt = Stateful::new(0);
    @Row {
      @FilledButton {
        on_tap: move |_| *$cnt.write() += 1,
        @{ Label::new("Inc") }
      }
      @H1 { text: pipe!($cnt.to_string()) }
    }
  };
  App::run(counter);
}

不使用DSL使用Ribir:

use ribir::prelude::*;

fn main() {
  let counter = |ctx: &mut BuildCtx| {
    let cnt = Stateful::new(0);

    let c_cnt = cnt.clone_writer();
    let inc_btn = FilledButton::declarer()
      .on_tap(move |_| *c_cnt.write() += 1)
      .finish(ctx)
      .with_child(Label::new("Inc"));

    let counter = H1::declarer()
      .text(pipe!($cnt.to_string()))
      .finish(ctx);

    Row::declarer()
      .finish(ctx)
      .with_child(inc_btn)
      .with_child(counter)
      .into_widget()
  };

  App::run(counter);
}

更多 示例

特性

  • 声明式语言 它不会引入全新的语言。相反,它提供了一组Rust宏,以便更容易地进行交互。您可以选择使用它或不使用它。
  • 小部件组合系统 有四种小部件来支持您,您可以选择不同的方式实现您的部件
    • 函数小部件和 Compose,从其他小部件的组合。
    • Render,实现您的布局并绘制任何您想要的内容。
    • ComposeChild,控制父组件和子组件之间的组合逻辑,并指定子组件的模板。
  • 非侵入式状态 将您的数据转换为可监听的状态,并根据状态的改变更新视图。
  • 布局系统 学习并受到 Flutter 子线性布局的启发,但并不相同。
  • 事件系统 是一个组合事件系统,支持事件冒泡和捕获。允许与任何组件组合,并且只有在使用时才存在。
  • 主题系统:支持为子树的不同部分使用不同的主题,并允许在运行时修改主题。
  • 绘图器 将视图转换为二维路径。
  • GPU 渲染绘图器 的后端,进行路径细分,以便您可以在任何 GPU 渲染引擎中轻松渲染三角形。提供了一个 wgpu 实现,作为默认的 GPU 渲染引擎。细分基于 [lyon]。
  • 文本 支持基本的文本排版和输入法编辑器,处于可用但粗糙的阶段。
  • 组件库 提供了20多个基本组件,但所有组件都处于粗糙阶段,API 仍不稳定。

架构概述

支持平台

平台 支持情况
Linux
Windows
macOS
iOS 🚧 尚未
Android 🚧 尚未
Web

Ribir 正在积极开发和测试桌面平台,桌面和 Web 平台已集成到我们的 CI/CD 管道中。

虽然该框架可以在移动平台上编译和运行,但我们还没有完全测试或适配它们的用户界面。我们计划在核心框架稳定并发布生产就绪的组件库后,专注于移动支持。

喜欢 Ribir 吗?

如果您喜欢 Ribir,请给我们仓库一个 ⭐ STAR ⬆️WATCH 👀 我们的仓库以了解最新动态!

每一个鼓励和反馈都可以帮助我们走得更远。

贡献

我们对社区贡献的错误修复和改进表示感激。

😎 新手使用 Ribir?

通过帮助我们改进我们的 文档 来了解框架。请随意打开一个 新的“文档”问题。我们也非常欢迎

  • 指出我们文档中的误解
  • 改进测试覆盖率的拉取请求
  • 添加未记录的代码(例如内置组件)
  • 报告错别字

有关更多信息,请参阅:

🤔 对某些事情感到困惑?

请随意前往讨论区并打开一个 新的“Q&A” 来获得贡献者的帮助。通常问题会导致框架的人机工程学改进、更好的文档,甚至新的功能!

😱 发现了一个错误?

报告所有错误!如果开发者感兴趣并有时间,我们很乐意帮助他们修复发现的错误。

谢谢

该项目得益于所有贡献者


我们还从以下框架中获得了灵感

许可

Ribir 是 MIT 许可

依赖关系

~19–40MB
~661K SLoC