#declarative #ui #gui-framework #compose-ui

ribir_builtin

Ribir 是一个用于构建现代原生/wasm 跨平台用户界面应用的框架

20 个版本

0.2.0-alpha.52024 年 3 月 5 日
0.1.0 2024 年 3 月 26 日
0.0.1-alpha.52023 年 7 月 4 日
0.0.0 2023 年 2 月 26 日

#11 in #compose-ui

MIT 许可证

6KB
152

Ribir - 非侵入式声明式 GUI 框架

Ribir-logo

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

什么是 Ribir?

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

体验一种基于您的数据结构 API 的 UI 开发新方法。任何数据变更都会触发精确的 UI 更新。您应该专注于设计您的数据结构及其 API。然后,您可以在不干扰其逻辑的情况下描述数据的 UI。

初见

计数器的简单示例

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);
}

更多 示例

特性

  • 声明式语言 并不引入全新的语言,而是提供了一组 Rust 宏以方便交互。
  • 小部件组合系统 有四种小部件以支持您以不同的方式实现小部件
    • 函数小部件和 Compose,通过其他小部件的组合。
    • Render,实现您的布局并绘制您想要的任何内容。
    • ComposeChild,控制父小部件和子小部件之间的组合逻辑并指定子小部件的模板。
  • 非侵入式状态 将您的数据转换为可监听的状态并根据状态的变更更新视图。
  • 布局系统 吸收并启发自 Flutter 的子线性布局,但并不相同。
  • 事件系统 是一个组合事件系统,支持事件冒泡和捕获。允许与任何小部件组合,并且仅在您使用它时存在。
  • 主题系统支持完整和继承/部分主题,因此您可以将其用于覆盖或动态切换子树的主题。包括调色板、图标、动画过渡、小部件的装饰小部件等。目前处于非常粗略的状态,API 将很快进行重新设计。
  • 动画基于状态但无副作用,在概念上几乎是稳定的,但预定义的动画还不多。
  • 绘图器将视图转换为 2D 路径。
  • GPU 渲染绘图器的后端,执行路径细分,以便您可以在任何 GPU 渲染引擎中轻松渲染三角形。提供了一个 wgpu 实现,作为默认的 GPU 渲染引擎。细分基于 [lyon]。
  • 文本支持基本的文本排版和 IME 输入,目前处于可使用但粗糙的阶段。
  • 小部件库提供了 20+ 个基本小部件,但所有小部件都处于粗糙阶段,API 仍然不稳定。

架构概述

支持平台

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

喜欢 Ribir 吗?

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

每一个鼓励和反馈都能支持我们走得更远。

已知问题

管道/监视可能会轻易引入循环引用,如果不手动取消订阅,则会导致内存泄漏。我们将在 v0.2.0 中解决这个问题。

在大多数情况下,框架将能够自动避免循环引用。文档将更新以解释如何在其他情况下避免循环引用,并提供一个 API 来帮助开发人员解决问题。

有关已知问题的完整列表,请参阅 问题

贡献

我们感谢社区为修复错误和改进所做的贡献。

😎 新手Ribir?

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

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

有关更多信息,请阅读:

🤔 对某些事情感到困惑?

请随时前往讨论区并打开 新的“问答” 以从贡献者那里获得帮助。通常问题会导致框架的易用性改进、更好的文档,甚至新功能!

😱 发现了 bug?

报告所有 bug!如果我们感兴趣并且有时间,我们将很高兴帮助开发人员修复他们找到的 bug。

谢谢

该项目之所以存在,要归功于所有做出贡献的人


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

许可证

Ribir 根据 MIT 许可

依赖项

~310–780KB
~19K SLoC