您的位置:  首页 > 技术杂谈 > 正文

Flutter桌面开发实践

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

1,多窗口支持

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

2,窗口优化

https://github.com/leanflutter/window_manager/pull/205
https://github.com/leanflutter/window_manager/pull/203

3,本地原生 Cursor

fix: add custom cursor interface on windows by Kingtous · Pull Request #36143 · flutter/engine

4,多级菜单

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

5,滚动条

滚轴速度慢,鼠标移到滚动条后滚轴失效
https://github.com/Kingtous/flutter_improved_scrolling

6,Bridge

Refactor and enhance `SyncReturn` to support more types by SoLongAndThanksForAllThePizza · Pull Request #663 · fzyzcjy/flutter_rust_bridge

7,Wayland 问题

https://github.com/leanflutter/screen_retriever/pull/3

8,CJK字体

https://github.com/flutter/flutter/issues/103811#issuecomment-1199227834
https://github.com/rustdesk/rustdesk/pull/1581/files
展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接