? 关于此模板
此 flutter-rust-app-template 为希望同时使用 Flutter 和 Rust 的开发者提供了即时功能。只需复制模板仓库,即可开始开发!
此模板主要使用 flutter_rust_bridge 库构建。它还整合了几个流行的软件包和对默认 Flutter 模板的修改,以确保最佳的开发流程。其设计考虑了未来的可扩展性和性能。
在默认 Flutter 模板中添加的附加功能包括:
- Rust 集成,能够使用任意数量的库 crate
- MVVM 模式,支持从 Dart 轻松绑定 ViewModel,以及从 Rust 更新 ViewModel
- 在 Dart 的热重载时重启 Rust 逻辑
- 使用 Python 进行便捷的项目管理
- 在翻译文件中编写用户界面文本
平台支持
构建支持多平台的 Flutter 项目可能是一项艰巨的任务,尤其是在集成 Rust 时。有了这个模板,您无需从头开始,也无需面对集成 Rust 的额外复杂性。
- ✅ Windows: 已测试并支持
- ✅ Linux: 已测试并支持
- ✅ Android: 已测试并支持
- ✅ macOS: 已测试并支持
- ✅ iOS: 已测试并支持
- ⏸️ Web: 目前不支持,但正在考虑中
贡献
如果您有任何建议或想报告 bug,请将其作为 issue 或 pull request 提交。我们会尽快回复。
? 项目结构
Flutter 负责跨平台用户界面,而 Rust 负责所有其他后端逻辑。前端和后端完全分离,这意味着 Dart 代码和 Rust 代码可以相互独立。这两个世界通过通道进行通信。
此外,您可以使用下面的 Python 脚本方便地将 flutter-rust-app-template 的最新提交拉取到您的仓库中。
? 系统准备
您可以选择自己喜欢的 IDE。但推荐使用 Visual Studio Code,因为它拥有 Flutter 和 Rust 社区的广泛支持。
基本步骤
- Git: 前往 官方下载页面
- Python: 这是自动化开发流程所必需的。如果您的系统未预装 Python,请从应用商店下载。您也可以在 官方下载页面 获取。请确保 `python` 在 PATH 环境变量中可用。建议使用 3.11 或更高版本。
- Rust: 请参考 官方文档。建议使用 1.69 或更高版本。
- Flutter: 请参考 官方文档。建议使用 3.10 或更高版本。
然后,您可以在终端中执行以下命令来确认您的系统已准备好进行开发。
git --version
python --version
rustc --version
flutter doctor
请仔细阅读输出,并安装终端中描述的必要组件。在安装这些组件的过程中,您可以重复执行这些命令来验证您的系统状态。
额外步骤
如果您计划为 Windows、Linux 或 macOS 编译代码,可以跳过此部分。
对于 Android,打开 Android Studio 并转到 `SDK Manager`。在 `SDK Tools` 标签页中,启用 `NDK (side by side)` 组件。之后,运行以下命令。
cargo install cargo-ndk
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add x86_64-linux-android
rustup target add i686-linux-android
对于 iOS,请运行以下命令。
rustup target add aarch64-apple-ios
rustup target add aarch64-apple-ios-sim
rustup target add x86_64-apple-ios
用额外的构建目标准备系统有时会遇到各种问题。如果您遇到任何问题,请随时访问 讨论页面 并开启一个问答帖寻求帮助。您也可以参考 `flutter_rust_bridge` 文档中的 系统组件安装说明。
?️ 设置
安装依赖项。
pip install -r requirements.txt
flutter pub get
rustup component add clippy
cargo install cargo-bloat
生成配置文件或从模板文件更新它们(如果它们已存在)。请务必检查终端输出,并在生成过程完成后手动填充这些文件。
python automate config-filling
? 实际开发
检查并修复 Python、Dart 和 Rust 代码中的问题。对于 Rust,它会在发布模式下检查代码。
python automate code-quality
在调试模式下运行应用程序。
flutter run
在发布模式下构建应用程序。
flutter build (platform) --release
检查发布模式下已编译二进制文件的实际大小。
python automate size-check (platform)
设置应用名称和域名。这只能进行一次,不可撤销。
python automate app-naming
使用 Flutter Launcher Icons 将 `./assets` 中的 `app_icon_full.png` 文件应用到多个平台。通过 Python 的强大功能,会为每个平台应用适当的圆角和缩放。在 Linux 上,您需要在分发包中手动包含图标。
python automate icon-gen
从 flutter-rust-app-template 拉取最新的提交。
python automate template-update
⛓️ MVVM 模式
该应用程序由 3 个层组成:
- 视图(View)由 Dart 构建
- ViewModel 由桥接提供
- 模型(Model)由 Rust 构建
该系统被设计为具有最小的性能瓶颈。详细信息在实际代码中以注释的形式进行解释。
? 文件夹结构
基本上,`./lib/main.dart` 是您的 Dart 逻辑的入口点,而 `./native/hub/src/lib.rs` 是您的 Rust 逻辑的入口点。
大多数顶级文件夹来自默认的 Flutter 模板。
windows: 特定于平台的文件夹linux: 特定于平台的文件夹macos: 特定于平台的文件夹android: 特定于平台的文件夹ios: 特定于平台的文件夹web: 特定于平台的文件夹lib: 驱动 Flutter 应用程序的 Dart 模块。
然而,在 `flutter-rust-app-template` 中创建了一些额外的文件夹来集成其他开发功能。
automate: 用于自动化开发流程的 Python 脚本。这些脚本与实际构建无关,也不会包含在应用发布中。仅供开发者使用。native: Rust 库 crate 的位置。此文件夹中的每个 crate 都会被编译成其自己的库二进制文件(`.dll`/`.so`/`.dylib`)。assets: 用于存放图片等资源文件的位置。
此外,您使用的工具或 IDE 可能会生成一些其他临时文件夹。这些文件夹不应纳入版本控制。
? 规则
前端与后端
Dart 应仅用于前端用户界面,Rust 应处理所有其他后端逻辑,例如文件处理、事件处理、定时器重复、计算、网络通信等。
异步优先于多线程
使用异步函数。不要使用 `std::thread`。
此模板使用 `tokio` 来执行异步函数。`tokio` 的异步运行时能够同时运行数百万个并发任务,而仅使用相当于计算机核心数量的线程。
请参阅 `tokio` 的 API 文档,以更熟悉其异步运行时和任务管理系统。
国际化
始终将用户界面文本写入 `./assets/translations.csv`。
当应用程序获得普及时,就需要支持多种人类语言。然而,手动替换用户界面中的数千个文本小部件并非易事。因此,将要呈现给普通用户的文本写入翻译文件是必须的。
有关更多详细信息,请参阅 Easy Localization 文档。
指导性注释
请编写友好且易读的注释,并为代码中的重要元素附加文档注释。
您可能不会独自开发。其他开发者应该能够掌握您编写的复杂代码。长而详细的注释也是受欢迎的。
开发自动化
依靠 `./automate` 中的 Python 脚本来加快和简化开发。
修改限制
请时刻小心!您不应在不充分了解其工作原理的情况下编辑文件。以下是应用程序开发过程中允许编辑的顶级文件和文件夹:
lib: Dart 模块。- 请勿修改内部的 `bridge` 文件夹。
pubspec.yaml: Dart 设置和依赖项。assets: 资源文件。native: Rust 库 crate。- 请勿修改 `hub` crate 内部的 `bridge` 模块。
