有时,在跨平台开发中,我们需要在特定平台的基础上执行某些代码。对于 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
到此这篇使用 Flutter Rust Bridge 进行跨平台开发的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/yd-flutter/3635.html