使用 Flutter Rust Bridge 进行跨平台开发

本文介绍了如何使用 Flutter Rust Bridge 进行跨平台开发,以解决特定平台功能需求。讨论了在原生代码和 Flutter 之间传输数据的挑战,以及使用特定平台语言(如 C++/Kotlin/Swift)的缺点。然后,文章详细阐述了如何使用 Rust 和 Flutter Rust Bridge 实现安全、高效的数据传输,并展示了创建 Flutter 项目、配置 Rust 项目、生成平台绑定代码的过程。最终,通过一个获取设备电池电量的例子,演示了如何从 Flutter 应用调用 Rust 代码并实时更新电池状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时,在跨平台开发中,我们需要在特定平台的基础上执行某些代码。对于 Flutter 应用程序,我们可以从丰富的插件库中绘制以使用许多平台的本机功能,而无需编写我们自己的实现,因此这可能不太令人生畏。

但是,随着我们的需求变得越来越小众,我们可能会发现不存在利用某个功能的插件。这时我们需要考虑编写我们自己的特定于平台的代码。

您面向的平台已具有可用于实现该功能的语言。例如,在Android上,您可以使用Kotlin或Java,而在Windows上,您可以使用C++。

所以,我们需要回答的第一个问题是:为什么我们甚至考虑将 Rust 作为我们特定于平台的语言?

将 Rust 与 Flutter 一起使用的案例

假设我们需要获取用户当前使用的设备的当前电池电量。如果没有提供此功能的插件,我们至少需要考虑两件事:

  • 如何在我们的原生代码和 Flutter 之间传输数据

  • 特定于平台的语言(如C++/Kotlin/Swift/等)

现在让我们探讨一下这些挑战中的每一个。

在原生代码和 Flutter 之间传输数据

如果我们有大量数据要在 Flutter 应用程序和本机代码之间传输,我们需要创建绑定来回传输数据。此过程涉及相当多的样板文件,当我们的实现发生变化时,必须更新这些绑定可能会令人沮丧且耗时。

幸运的是,有一个名为Pigeon的软件包应该可以为开发人员自动化很多。这对我们的处境有帮助吗?

快速浏览一下Pigeon支持平台的文档,就会发现Pigeon支持生成以下内容:

  • 适用于 iOS 的 Objective-C 代码(可通过 Swift 访问))

  • 适用于 iOS 的实验性 Swift 代码

  • 适用于 Android 的 Java 代码(可通过 Kotlin 访问)

  • 适用于 Android 的实验性 Kotlin 代码

  • 适用于 Windows 的实验性C++代码

尽管 Kotlin 和 Swift 在目标移动平台上得到了采用,但 Pigeon 对这些平台的支持仍处于实验阶段。

对于移动应用程序来说,这没什么大不了的,因为你可以从 Kotlin 调用 Java 代码,从 Swift 调用 Objective-C 代码。这允许您在应用程序中利用生成的 Pigeon 代码。但是,桌面和Web应用程序是另一回事。

Pigeon对Windows的支持是实验性的,对Linux的支持不存在。如果您希望将应用投入生产,那么使用实验性生成器并不是一个好主意。对于 Linux 或 Web,无论如何,您都可以手动编写平台绑定。

如果您正在编写面向许多平台的应用程序,这可能会成为一件苦差事,尤其是当您的应用程序针对 Pigeon 支持处于实验性或不存在的平台时。这不是一个无法管理的工作量,但它仍然是工作量。

使用特定于平台的语言的缺点

Flutter,就其本质而言,是一种跨平台的语言。这意味着一些编写 Flutter 应用程序的人有可能没有遇到真正的平台特定语言,如 Kotlin 或 Swift。

在这些情况下,在StackOverflow中搜索实现并尝试猜测自己的方式并不难。Kotlin 和 Swift 将为您管理内存,在对象不再被访问时处理它们,因此引入内存泄漏更难(尽管并非不可能)。

在Windows和Linux上,这是一个完全不同的主张。

要实现本机功能,您必须使用 C++。由于Pigeon支持在Windows上是实验性的,在Linux上不存在,因此您不仅必须使用您可能不理解的语言编写特定于平台的代码,而且还必须使用绑定代码。

使这个命题更加困难的是,您必须管理自己的记忆并跟踪自己的参考资料。最重要的是,在本机层上发生的任何未捕获的异常都将导致您的应用程序在桌面上崩溃。

简而言之,即使你可以创建绑定代码,你也只会绑定到你的 - 如果你是一个初学者 - 可能非常不安全的代码。这不是很吸引人。

如何使用 Rust 和 Flutter Rust Bridge 解决这些问题

要在 Flutter 项目中使用 Rust,我们必须使用社区生成的 软件包。flutter_rust_bridge

该软件包具有广泛的平台支持,包括Android,iOS,Windows,Linux,macOS和Web。因此,无论您的目标是什么平台,您都可以使用 Rust 和 Flutter Rust Bridge。

快速回顾一下 Rust 和 Flutter Rust Bridge 的好处,它成为一个非常引人注目的案例。

首先,Flutter Rust Bridge 会为您生成所有绑定代码,并支持异步操作,例如发射到 .Stream

接下来,Rust 是一种更容易使用的语言,也比 Windows 上的C++更安全。

此外,您可以在 Rust 项目中使用 Rust crate 来利用本机功能,而不是编写自己的实现。

最后,Rust 代码中未捕获的异常通过 传输到 Flutter,您可以相应地查看和排除故障。与Windows上导致桌面崩溃的本机未捕获异常相比,这是一种更好的体验。panic

为了演示这一点,让我们创建一个简单的 Flutter 应用程序,该应用程序获取运行它的设备的当前电池电量。

创建我们的颤振锈桥项目

首先,让我们为 安装一些依赖项。这些是 Rust 编程语言和 LLVM。flutter_rust_bridge

首先从网站下载并安装 Rust。在命令窗口中,运行以下命令:

winget install -e --id LLVM.LLVM

这将下载并设置 LLVM。

如果你正在使用 Flutter 和 Rust 创建一个新项目,你可以从 Github 克隆这个模板存储库。这个模板是现成的,包含了让 Rust 在你的 Flutter 项目中工作所需的所有零碎的东西。然后,你可以跳到本教程的“编写 Rust 代码”部分。

但是,如果您有一个现有的 Flutter 项目,并且想要添加 Rust,请继续阅读。如果您对 Rust 如何与 Flutter 项目集成感到好奇,这也将很有帮助。

就我而言,我们将 Rust 与我通过运行 创建的全新 Flutter 项目集成。flutter create windows_battery_check

由于我们将对项目进行低级别更改,因此现在是将代码签入源代码管理系统的理想时机。这样,如果我们不小心破坏了您的项目,也很容易撤消。

配置 Rust 项目

让我们浏览一下文档,了解如何将 Rust 集成到我们的项目中。flutter_rust_bridge

它本身并不是一个复杂的设置。但是,如果我们弄错了任何步骤,我们的项目将无法构建,并且很难解决原因。我还将提供一些关于我们正在做的事情的解释,以帮助您了解如果这也

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如意号。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值