Flutter桌面開發實踐

語言: CN / TW / HK
我們前面提到將 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字體