问题

在Tauri应用程序中.我在双手中有这个主函数,我正在try 将应用程序句柄传递给系统托盘.rs::get_system_tray函数.

我不明白如何正确传递应用程序句柄

我得到了这个错误:

mismatched types
expected struct `tauri::SystemTray`
  found fn item `for<'a> fn(&'a tauri::AppHandle) -> tauri::SystemTray {system_tray::get_system_tray}`

在下面的代码行中:

.system_tray(system_tray::get_system_tray)

代码

双手

fn main() {
    tauri::Builder::default()
        .setup(setup_handler)
        .plugin(tauri_plugin_store::Builder::default().build())
        .system_tray(system_tray::get_system_tray)
        .on_system_tray_event(system_tray::on_system_tray_event)
        .invoke_handler(tauri::generate_handler![
            system_info::get_system_stats,
            cpu_info::get_cpu_stats
        ])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

系统托盘.rs

use tauri::{AppHandle, CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu, SystemTrayMenuItem};

pub fn get_system_tray(app: &AppHandle) -> SystemTray {
    let app_version = app.package_info().version.to_string();
    let title_text = format!("Sigma File Manager Next {}", app_version);
    let title = CustomMenuItem::new("title".to_string(), title_text).disabled();
    let show_main_window = CustomMenuItem::new("show_main_window".to_string(), "Open app window");
    let reload_main_window = CustomMenuItem::new("reload_main_window".to_string(), "Reload app window");
    let quit = CustomMenuItem::new("quit".to_string(), "Quit");
    let tray_menu = SystemTrayMenu::new()
        .add_item(title)
        .add_native_item(SystemTrayMenuItem::Separator)
        .add_item(show_main_window)
        .add_item(reload_main_window)
        .add_native_item(SystemTrayMenuItem::Separator)
        .add_item(quit);

    SystemTray::new().with_menu(tray_menu)
}

推荐答案

如果您需要AppHandle来生成SystemTray,则应该能够在运行时生成build个托盘,如下所示:

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet])
        .setup(|app| {
            let handle = app.handle();

            let _tray_handle = system_tray::get_system_tray(&handle).build(app)?;

            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

这还允许您在需要时更新托盘.

Rust相关问答推荐

即使参数和结果具有相同类型,fn的TypId也会不同

使用元组执行条件分支的正确方法

如何对字符串引用的引用向量进行排序,而不是对最外层的引用进行排序?

使用Clap时如何将String作为Into Str参数传递?

定义采用更高级类型泛型的性状

如何循环遍历0..V.len()-1何时v可能为空?

如何正确重新排列代码以绕过铁 rust 借入判断器?

Rust 的多态现象.AsRef与Derf

AXUM一路由多个不包括URL的参数类型

Boxing 如何将数据从堆栈移动到堆?

try 从标准输入获取用户名和密码并删除 \r\n

unwrap 选项类型出现错误:无法移出共享引用后面的*foo

全面的 Rust Ch.16.2 - 使用捕获和 const 表达式的 struct 模式匹配

Rust typestate 模式:实现多个状态?

有没有办法通过命令获取 Rust crate 的可安装版本列表?

是否可以在 Rust 中的特定字符上实现特征?

从现有系列和 map 值创建新系列

Rust 中的let是做什么的?

当我在 struct 中存储异步函数时,为什么它需要生命周期

为什么这个闭包没有比 var 长寿?