记一次使用egui 构建的轻量小程序码生成工具
最近要使用小程序码生成工具,捡起了以前开发的使用 Rust + native-windows-gui 打造极致轻量的小程序工具。 我发现这个工具最大的痛点就是每次打开都需要重复输入appid和appsecret。我决定修复它,我没有重新开始该项目,是因为我准备使用最近很流行的egui库。使用这个库的另一个原因是我为开发ESP网关客户端做技术储备。 在开发的中间,我还想使用iced,但是开发了一段时间放弃了,不是iced不好,是因为我没有精力。它适合长期的大型的项目。我现在想快速开发完成,所以egui的界面我忍受了。 开发完成的初版界面如下: 它极致轻量,只有一个小巧的运行文件,无需安装臃肿的运行库。响应迅速毫秒级启动,操作如丝般顺滑,没有多余的动效和加载等待。 下载工具后,放入你要生成小程序码的文件夹中,打开工具,填入小程序参数(AppID、路径等),一键获取高清太阳码,小程序码图片就会输出到本文件夹中。 最为暖心的是,应用重新启动后,不用重新输入appid和appsecret,并且会自动获取token。 下面看看核心代码片段: // --- 主应用状态 --- pub struct BeanApp { store: AppConfig, // 保存信息 appid_raw: String, // appid secret_raw: String, // appsecret access_token: Option<String>, // 存储 Token expires_in: u64, // 存储过期时间戳 (秒) output_dir: String, // 小程序码输出目录 is_pro: bool, // 是否开启了高级功能 active_tab: usize, // 0: 单张模式, 1: 批量模式 page_path: String, // 页面路径 scene_value: String, // 场景值 qr_size: u32, // 导出尺寸 show_crop_line: bool, // 是否显示裁剪线 preview_texture: Option<TextureHandle>, // 预览图句柄 status_msg: String, // 状态信息 show_password: bool, // 是否显示密码 tx: Sender<AppMessage>, // 发送端 rx: Receiver<AppMessage>, // 接收端 ctx: egui::Context, // 保存上下文,用于异步刷新 is_loading_token: bool, // 防止重复请求 } 这是最核心的内容,egui就靠这个结构体,让UI和业务逻辑进行交互。本质就是UI交互区修改这个结构体中的一些内容,然后调用业务逻辑去处理内容,然后再返回信息到这个结构体,然后UI读取这些值的内容再显示出来。 ...