菜单

示例和模式

相关源文件

本页面详细介绍了 Tauri 代码库中提供的示例和模式,这些示例和模式展示了 Tauri 应用程序开发的最佳实践。这些示例展示了 Tauri 核心功能的实际实现,并为开发 Tauri 应用程序的开发者提供了参考。

有关 Tauri CLI 和应用程序构建的信息,请参阅 构建和打包系统。有关核心 API 实现的详细信息,请参阅 JavaScript API

API 示例应用程序

Tauri API 示例应用程序是 Tauri 功能的主要验证应用程序。它既能展示功能,也是开发的测试平台。

概述与目的

API 示例应用程序演示了

  1. JavaScript 和 Rust 之间的进程间通信
  2. 窗口管理功能
  3. 应用程序和系统集成功能
  4. 菜单和托盘功能
  5. WebRTC 功能
  6. 状态管理模式

来源:examples/api/src/views/Welcome.svelte26-40 examples/api/src-tauri/Cargo.toml1-44

架构

图示:API 示例应用架构

来源:examples/api/src-tauri/src/lib.rs1-204 examples/api/src/App.svelte1-352

功能演示视图

示例应用程序分为几个视图,每个视图都演示了特定的 Tauri 功能

视图目的源文件
欢迎基本应用程序信息和版本显示src/views/Welcome.svelte
通信JavaScript 和 Rust 之间的 IPCsrc/views/Communication.svelte
窗口窗口创建和操作src/views/Window.svelte
App应用程序级 APIsrc/views/App.svelte
菜单菜单创建和交互src/views/Menu.svelte
托盘系统托盘功能src/views/Tray.svelte
WebRTC媒体捕获功能src/views/WebRTC.svelte

来源:examples/api/src/App.svelte53-70

常见模式

本节重点介绍了 Tauri 示例中展示的关键实现模式,这些模式可作为 Tauri 应用程序开发的最佳实践。

应用程序设置模式

Tauri 应用程序设置模式遵循一致的结构来初始化应用程序、配置功能和管理应用程序生命周期。

图示:Tauri 应用程序初始化模式

来源:examples/api/src-tauri/src/lib.rs33-188 examples/api/src-tauri/src/main.rs1-10

此模式的关键组件包括

  1. 入口点main.rs 文件作为入口点,调用 run() 函数
  2. 应用程序构建器:使用 tauri::Builder 来配置应用程序
  3. 插件注册:使用 .plugin() 方法注册插件
  4. 设置回调:设置回调可配置窗口创建和其他初始化
  5. 命令注册:使用 invoke_handler() 方法注册命令
  6. 应用程序构建:使用 .build() 方法创建应用程序实例
  7. 事件循环:使用 .run() 方法启动事件循环并处理系统事件

IPC 通信模式

Tauri 提供了多种 JavaScript 和 Rust 之间通信的模式。

图示:IPC 通信模式

来源:examples/api/src/views/Communication.svelte1-70 examples/api/src-tauri/src/lib.rs129-142

命令模式

命令模式用于 JavaScript 和 Rust 之间的请求-响应交互

  1. 在 Rust 中使用 #[tauri::command] 属性定义一个命令函数
  2. 使用 invoke_handler(tauri::generate_handler!([...])) 注册该命令
  3. 使用 invoke() 从 JavaScript 调用该命令

API 示例应用中的示例

  • log_operation:演示简单的命令处理
  • perform_request:展示处理复杂数据结构
  • echo:演示从命令返回数据

事件模式

事件模式支持异步通信

  1. 使用 listen() 在 JavaScript 或 Rust 中监听事件
  2. 使用 emit() 从任一端发出事件
  3. 根据需要处理事件负载数据

在示例应用程序中,js-eventrust-event 演示了双向事件通信。

通道模式

通道模式提供了一种基于流的通信方法

  1. 使用 new Channel() 在 JavaScript 中创建通道
  2. 将通道传递给 Rust 命令
  3. 通过通道将消息发送回 JavaScript

示例应用程序中的 spam 命令演示了此模式。

来源:examples/api/src/views/Communication.svelte49-53

窗口管理模式

示例应用程序演示了多种窗口管理模式。

图示:窗口管理模式

来源:examples/api/src/views/Window.svelte1-808

关键的窗口管理模式包括

  1. 窗口创建:创建具有特定配置的新窗口

  2. 窗口属性:设置和更新窗口属性

  3. 窗口事件:监听和处理窗口事件

  4. 窗口状态:管理窗口状态(最大化、最小化、全屏)

  5. 视觉效果:将视觉效果应用于窗口(特定于平台)

示例应用程序演示了创建和管理菜单及系统托盘图标的模式。

图示:菜单和托盘集成

来源:examples/api/src/views/Menu.svelte1-50 examples/api/src/views/Tray.svelte1-80 examples/api/src/components/MenuBuilder.svelte1-46 examples/api/src/components/MenuItemBuilder.svelte1-150

关键模式包括

  1. 菜单构建:以编程方式构建菜单

  2. 菜单放置:设置菜单出现的位置

  3. 托盘图标创建:创建系统托盘图标

  4. 菜单项类型:使用不同类型的菜单项

    • MenuItem:标准的文本菜单项
    • CheckMenuItem:带有选中状态的切换菜单项
    • IconMenuItem:带有图标的菜单项
    • PredefinedMenuItem:系统提供的菜单项

插件集成模式

示例应用程序演示了如何集成和使用 Tauri 插件。

图示:插件集成模式

来源:examples/api/src-tauri/src/lib.rs42-48 examples/api/src-tauri/src/lib.rs86-98

插件模式的关键方面

  1. 插件注册:将插件添加到 Tauri 构建器

  2. 插件使用:使用插件的功能

  3. 插件扩展特质:通过扩展特质访问插件功能

实施最佳实践

根据示例应用程序,以下是 Tauri 应用程序开发的一些最佳实践

关注点分离

示例应用程序展示了有效的关注点分离

  • 后端 Rust 代码用于系统交互和业务逻辑
  • 前端 Web 代码用于 UI 展示
  • 清晰的 IPC 边界用于通信

妥善的资源管理

示例展示了正确的资源生命周期管理

  • 在组件销毁时清理事件监听器

  • 在不再需要时关闭资源

错误处理

该示例演示了正确的错误处理模式

  • invoke() 调用中使用 catch 来处理错误
  • 为错误提供用户反馈
  • 为调试记录错误

渐进增强

该应用程序使用功能检测和渐进增强

  • 在使用功能之前检查平台功能
  • 根据平台功能调整 UI
  • 在功能不可用时提供回退

跨平台考量

该示例优雅地处理了平台差异

  • 使用平台检测

  • 有条件地启用特定于平台的f功能

  • 为每个平台提供适当的 UI

结论

Tauri API 示例应用程序提供了 Tauri 应用程序开发的最佳实践的全面参考实现。通过研究此示例中展示的模式,开发人员可以了解如何构建他们的 Tauri 应用程序、实现 JavaScript 和 Rust 之间的有效通信、管理应用程序状态以及利用 Tauri 的功能来创建跨平台桌面应用程序。