Flutter桌面开发实践

原创
09/20 11:14
阅读数 1.3W
我们前面提到将 RustDesk 原来基于 Html / Js(Sciter)的前端迁移到 Flutter,不得不说迁移进度远远慢于预期,曾今一度怀疑当初的选型,可是又没有其他的更好选择。
 
Tauri 貌似是最好的选择,可是其性能应付不了我们的场景。Sciter 虽是采用 Html / Js,但是他的渲染是自己写的,有原生的 Video 接口。Tauri 采用自己的 Wry 统一了各个平台浏览器的 API 接口,但是无法打破浏览器边界的限制,可定制性和兼容性也低于 Electron。但是本人依然很喜欢 Tauri,因为小而美,开发调试方便,效率高,足以应付大部分场景的 Production 需求,期待它的未来发展,更希望它们自己的渲染实现能够早日达成。
 
Qt 也是比较实际的选择,可是看到 Qt 的 Rust 绑定之后,我们就不寒而栗,因为其接口还是 Unsafe 模式,所以也不敢继续看下去。
 
Flutter 前端开发更接近于原生的 UI 开发方式,复杂度明显高于历经风霜的 Web 技术,这一点从迁移后的代码行数就可见一斑,代码啰嗦臃肿很多,虽然换来了更好的工程实践和可维护性(对于我们这种小团队意义不大)。
 
复杂度倒是小事情,主要障碍还是开发过程中的各种天坑,虽然早前有所准备,早吃螃蟹肯定就得承担这些后果,但是没有预料到有这么大和多,在此列举几个有特点的问题,并公开一下我们对上游项目的贡献。

1,多窗口支持

但是这个 Pub 在 Windows 上只能支持到 Flutter 3.0.5,Flutter上有相关 issue,但是优先级低,估计等不了,还是得自己解决。我们暂时选择使用老版本 Flutter,毕竟目前也没看出新版本对 Windows 有什么明显的优化,个人感觉 Flutter 团队的重点还是在移动端,桌面端很多基本问题(多级菜单,本地光标,滚动条)都一直在拖。

2,窗口优化

3,本地原生 Cursor

4,多级菜单

目前我们尽量避免使用多级菜单,有原生菜单的实现,但是可定制很低,限制太多。

5,滚动条

滚轴速度慢,鼠标移到滚动条后滚轴失效

6,Bridge

7,Wayland 问题

8,CJK字体

展开阅读全文
加载中

作者的其它热门文章

打赏
4
6 收藏
分享
打赏
0 评论
6 收藏
4
分享
返回顶部
顶部