码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Tauri之单例+多窗口


    Tauri之单例+多窗口

    Tauri 1.4 + React 18

    单例可以通过tauri_plugin_single_instance实现,多窗口可以简单通过路由来实现

    单例
        tauri::Builder::default()
            .setup(|app| {
                let mut label = "home";
                let args: Vec<String> = std::env::args().collect();
                if args.len() > 1 {
                    label = args.get(1).unwrap();
                }
                let mut runtime: tokio::runtime::Runtime = tokio::runtime::Runtime::new().expect("Unable to create a runtime");
                let s = runtime.block_on(create_window(label, &app.handle()));
                Ok(())
            })
            .plugin(tauri_plugin_single_instance::init(|app, argv, cwd| {
                let mut label = "home";
                if argv.len() > 1 {
                    label = argv.get(1).unwrap();
                }
                let mut runtime = tokio::runtime::Runtime::new().expect("Unable to create a runtime");
                let s = runtime.block_on(create_window(label, app));
            }))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 创建窗口的操作要异步,否则可能会卡死
    • setup时创建初始化窗口
    • tauri_plugin_single_instance处理重复打开操作
    多窗口
    async fn create_window(label: &str, app: &tauri::AppHandle) {
        let config = get_window_config(label);
        if let Some(window) = app.get_window(label) {
            let _ = window.show();
            let _ = window.set_focus();
            let _ = window.request_user_attention(Some(UserAttentionType::Informational));
        } else {
            let window = tauri::window::WindowBuilder::new(
                app,
                label,
                tauri::WindowUrl::App(label.parse().unwrap()),
            )
            .center()
            .title(config["title"].as_str().unwrap())
            .inner_size(config["width"].as_f64().unwrap(), config["height"].as_f64().unwrap())
            .build()
            .unwrap();
            window.set_focus();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
        
          
          } />
            } />
            } />
          
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 通过唯一label区分窗口,动态创建新窗口或恢复旧窗口

    • 动态创建窗口的时候,记得清空tauri.config.json里的windows

        "tauri": {
          "windows": [
          ]
        }
      
      • 1
      • 2
      • 3
      • 4
    • 这里前端部分使用react 18 + react-router-dom 6,注意要使用BrowserRouter

  • 相关阅读:
    持续集成和持续部署(CI/CD)
    Redis高性能设计之epoll和IO多路复用深度解析
    [联邦学习TFF]构建自己的联邦学习模型
    【idea】使用教程:idea 打开项目、配置、项目打包详细教程
    《深度医疗》—无情的算法如何为医疗带来人性
    docker专题-数据管理
    电脑清理c盘怎么清理全教程,教你彻底清理所有垃圾
    Spring In Action 5 学习笔记 chapter8 JMS(ActiveMQ Artemis)要点
    nvidia系统开机自启
    华为云API图像识别Image的趣味性—AI识别迈克尔·杰克逊
  • 原文地址:https://blog.csdn.net/sinat_14899485/article/details/132729230
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号