? 关于此模板

flutter-rust-app-template 为希望同时使用 FlutterRust 的开发者提供了即时功能。只需复制模板仓库,即可开始开发!

preview

此模板主要使用 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,请将其作为 issuepull request 提交。我们会尽快回复。

? 项目结构

Flutter 负责跨平台用户界面,而 Rust 负责所有其他后端逻辑。前端和后端完全分离,这意味着 Dart 代码和 Rust 代码可以相互独立。这两个世界通过通道进行通信。

此外,您可以使用下面的 Python 脚本方便地将 flutter-rust-app-template 的最新提交拉取到您的仓库中。

? 系统准备

您可以选择自己喜欢的 IDE。但推荐使用 Visual Studio Code,因为它拥有 Flutter 和 Rust 社区的广泛支持。

基本步骤

  1. Git: 前往 官方下载页面
  2. Python: 这是自动化开发流程所必需的。如果您的系统未预装 Python,请从应用商店下载。您也可以在 官方下载页面 获取。请确保 `python` 在 PATH 环境变量中可用。建议使用 3.11 或更高版本。
  3. Rust: 请参考 官方文档。建议使用 1.69 或更高版本。
  4. 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` 模块。

GitHub

查看 Github