副標題:Ubuntu團隊已經為所有Linux發行版上的Flutter應用程式製作了一個新的基於GTK+的主機。
原文作者:medium.com/@csells
釋出時間:2020年7月8日
作者:Chris Sells (Google) & Ken VanDine (Canonical)
Google對Flutter的目標一直是提供一個可移植的工具包,用於構建以原生速度執行的漂亮UI,無論你的目標是哪個平臺。為了驗證這一能力,我們首先關注移動平臺Android和iOS,在這兩個平臺上,我們已經看到有超過8萬個快速、漂亮的Flutter應用釋出到Google Play。
為了在這一成功的基礎上再接再厲,一年多來,我們一直在將我們的關注點擴充套件到包括桌面級體驗,包括網路和桌面作業系統:macOS、Windows和Linux。這項工作包括對引擎進行大量重構,以支援桌面風格的滑鼠和鍵盤輸入,以及可調整大小的頂層視窗。它還包括新的UI功能,能很好地適應桌面,如Material Density支援和NavigationRail,以及在Dart:FFI中的實驗和對系統選單欄和標準對話方塊的訪問,與底層桌面作業系統深度整合的實驗。所有這些工作都是為了確保Flutter除了適合移動風格的體驗外,還能處理全功能、全尺寸的桌面應用。
長期以來,我們的願景是讓Flutter為平臺提供動力。我們已經看到這一點在谷歌通過Assistant等產品體現出來,所以現在我們很高興看到其他人利用Flutter為更多平臺提供動力。今天,我們很高興與世界上最流行的桌面Linux發行版Ubuntu的發行商Canonical一起,共同宣佈Flutter的Linux alpha的可用性。
為什麼Linux要用Flutter?
去年,當Google宣佈用Flutter支援桌面級應用時,Canonical看到了一個令人興奮的機會,使包括Ubuntu在內的Linux發行版成為對Flutter應用開發者有吸引力的目標平臺。Flutter的原生跨平臺故事正在迅速發展,Canonical希望成為先鋒。通過在Flutter中實現對桌面Linux的支援,Canonical讓應用開發者可以非常容易地通過Linux的應用商店Snap Store為Linux使用者釋出應用。通過使Linux成為一流的Flutter平臺,Canonical正在邀請應用開發者向數百萬Linux使用者釋出他們的應用,並擴大向他們提供高質量的應用。
關於Flutter的一些事情讓Canonical感到興奮。
- 快速增長的應用開發者生態系統
- 多平臺支援
- 高度優化的本地應用
- 現代UI框架,支援宣告式、反應式和可組合的widget。
- 使用Visual Studio Code、Android Studio和IntelliJ的豐富開發平臺。
谷歌最初宣佈宣佈支援Flutter桌面,首先是支援macOS的alpha版本,並計劃支援Linux和Windows。Canonical對Flutter進行了大量投資,專門成立了一個開發者團隊,與谷歌的開發者一起為大多數Linux發行版帶來最佳的Flutter體驗。Canonical將繼續與谷歌合作,進一步完善對Linux的支援,並保持與其他支援平臺的功能對等。
Flokk。證明Flutter已經為桌面做好了準備。
為了證明Flutter已經為桌面做好了準備,我們與gskinner的設計師和開發人員合作,建立了一個創新的、漂亮的Flutter桌面應用。Flokk是一個現實世界的應用,它可以使用現實世界的資料,特別是你的谷歌聯絡人列表。
視訊:將 Flutter 帶到 Linux。Flokk聯絡人
除了能夠管理你的聯絡人,包括搜尋聯絡人、新增新的聯絡人和編輯現有的聯絡人,Flokk還可以讓你將GitHub和Twitter的手柄資訊與你的聯絡人關聯起來。
Flokk通訊錄應用是用Flutter打造的,針對的是桌面。
GitHub和Twitter通知的顯示,將你的聯絡人變成了你自己的個人社交網路。如果你在Flokk Contacts中沒有看到你喜歡的社交網路,那麼好訊息是Flokk是完全開源的,所以你可以提交PR來新增你的收藏夾。
除了在社交領域的創新,Flokk還使用Flutter功能,讓人看起來感覺很好。僅舉一例,深色主題不僅可以切換顏色,而且在切換時還會有動畫變化。
Flutter使Flokk能夠利用流暢的動畫、高效能的滾動和簡單的主題。
Flokk Contacts應用背後的創意團隊是由Grant Skinner領導的,他以卓越的設計和創新使用者體驗的實現而聞名。對於在Linux上與Flutter的合作,Grant這樣說。
"構建Flokk Contacts應用是一件輕而易舉的事情! 我們能夠將我們之前在Flutter方面的所有專業知識應用到Linux上,幾乎沒有任何調整,應用程式執行得非常好。與Canonical團隊合作是一次美妙的經歷;他們熱情、投入,並且熱衷於讓Flutter不僅適用於Linux,而且適用於每個平臺。這是一個了不起的專案,我很高興能夠用Flutter瞄準另一個主要的作業系統。" - Grant Skinner
如果你想在Linux機器上使用Flokk應用,你可以在GitHub上下載最新版本。或者,如果你正在執行snapd,你可以從Snap Store下載Flokk應用。
在Linux上輕鬆安裝Flutter
現在你已經看到了Flutter對於桌面級應用的工作效果,尤其是在Linux上,你會想讓它在自己的Linux機器上執行。為了使這一點儘可能的簡單,我們很高興在Snap Store中提供Flutter SDK for Linux作為Snap。Flutter SDK snap提供了在您最喜歡的Linux發行版上開發Flutter應用程式所需的一切。不需要安裝一堆開發依賴;只需安裝Flutter SDK snap和您最喜歡的IDE,您就擁有了為Linux建立、構建和釋出應用程式所需的一切。
例如,如果你想開始為Linux開發Flutter應用程式,而你選擇的IDE是Visual Studio Code,這就是你在Linux終端需要做的一切。
$ snap install --classic flutter
$ snap install --classic code
$ code --install-extension dart-code.flutter。
複製程式碼
如果你也想使用Linux開發移動應用,你可以通過安裝Android SDK或Android Studio(其中包括Android SDK)來實現。有關Flutter SDK作為快件的更多資訊,請參閱 snapcraft.io/flutter 。
Flutter for Linux桌面
一旦在Linux機器上安裝了Flutter SDK,要構建桌面應用就需要升級到Flutter dev或master通道。然後啟用Linux桌面支援。 啟用Linux桌面支援:
$ flutter channel dev
$ flutter upgrade
$ flutter config --enable-linux-desktop
複製程式碼
現在,當你建立一個新的Flutter專案時,你會得到一個linux子目錄,讓你在Linux桌面上執行應用程式。
$ flutter create counter
$ cd counter
$ flutter run -d linux
複製程式碼
著名的Flutter Counter應用也能在Linux上執行得很好。
你將得到的是一個用Flutter構建的、執行在最新穩定版GTK+上的閃亮的新Linux
應用。如果你有一個現有的Flutter專案,你想在啟用Linux後新增Linux支援,你可以像這樣新增linux子目錄。
$ cd my_flutter_app
$ flutter create .
複製程式碼
這將建立linux
子目錄與Runner專案,你需要在Linux桌面上構建和執行你的Flutter應用程式。
從Flutter訪問Linux中的原生程式碼
除了通過編寫Dart建立Flutter小部件來支援桌面外,你的Linux桌面應用程式還可以使用平臺通道或C/C++的Dart外函式介面來訪問所有的原生Linux。或者,如果你想重用已有的程式碼,你可以在 pub.dev,Dart 和 Flutter 的包管理器網站上找到這些程式碼。在pub.dev上,你會發現大部分的包都是純Dart的,其中大部分在Linux應用中工作得很好。有些包,被稱為外掛,其中有針對一個或多個平臺的原生程式碼。作為此次釋出的一部分,我們在 pub.dev 上釋出了三個使用 Linux 本地功能的外掛。
- url_launcher:在提供的URL上啟動預設瀏覽器。
- shared_preferences: 在應用程式會話之間共享的使用者偏好。
- path_provider:特殊用途目錄的路徑資訊,如下載、圖片等。
這些外掛中的每一個都可以供你在你的應用程式中使用,以及作為如何從你的Flutter程式碼中原生地訪問Linux的一個例子,比如url_launcher的Linux實現。
部署到Snap Store
要將你的Flutter應用部署到Snap Store,你首先需要安裝Snapcraft,這個工具你將用來構建和釋出你的應用作為一個快照。
$ sudo snap install snapcraft --classic
複製程式碼
要驅動Snapcraft工具,你需要在你的應用程式的專案目錄下建立一個snapcraft.yaml
檔案。作為一個例子,這是Flokk的snapcraft.yaml
檔案。
name: flokk-contacts
version: 1.0.1
summary: Flokk Contacts
description: A fresh and modern Google Contacts manager that integrates with GitHub and Twitter.
confinement: strict
base: core18
grade: stable
apps:
flokk-contacts:
command: flokk-contacts
extensions: [flutter-master]
plugs:
- network
parts:
flokk-contacts:
source: .
plugin: flutter
flutter-target: lib/main.dart # 應用程式的主入口點檔案。
複製程式碼
在你的snapcraft.yaml
檔案所在的目錄下,你現在可以執行snapcraft來構建你的應用程式的snap。
$ snapcraft
複製程式碼
如果一切順利,這將在你當前的工作目錄下生成一個檔案,比如flokk-contacts_1.0.1_amd64.snap
。
一旦你在Snap Store中設定了釋出賬戶,你就可以釋出你的snap了。
$ snapcraft登入
$ snapcraft register flokk-contacts.
$ snapcraft upload flokk-contacts_1.0.1_amd64.snap --release edge
複製程式碼
該命令將把應用程式上傳到Snap Store,並嘗試將其釋出到邊緣通道中。一旦您的應用程式釋出到邊緣通道,就可以通過Snap Store桌面客戶端或使用命令列進行安裝。
$ snap install --edge flokk-contacts
複製程式碼
有關構建你的第一個快照並在Snap Store中釋出的更多細節,請參見 snapcraft.io/first-snap#… ,獲取指導教程。
Flutter Linux桌面樣本
Flokk應用是一個針對Linux桌面的現實世界Flutter應用的優秀例子。如果想了解更簡單的示例,你可以看看照片搜尋應用,它也是專門為展示桌面功能而打造的。
嘗試Linux上的照片搜尋示例
照片搜尋是一款簡單的線上照片搜尋應用,它使用多個外掛來接入原生平臺功能,支援macOS和Linux。
如果想了解一個Linux桌面應用的例子,並有一步一步的說明,我推薦《編寫一個Flutter桌面應用》codelab,它指導你使用OAuth和GraphQL在Flutter中構建一個GitHub客戶端。
Flutter的GitHub codelab客戶端應用在行動中。
對於一個更全面的應用,可以鍛鍊Flutter更多的表面積,以及提供幾個小程式,我推薦Flutter Gallery,它是去年重新設計的,支援桌面以及手機。如果你想看看它的執行情況,你也可以在Snap Store上檢視。
Flutter Gallary樣品可在Snap商店購買
又有一款桌面應用展現了Flutter有趣的一面,它是由Thorsten Lorenz打造的一款名為batufo的多人遊戲。這款遊戲以美麗的背景為背景,讓來自世界各地的玩家實時對戰。
在多個Flutter平臺上實時播放
Thorsten一直在構建這個遊戲,以支援多個Flutter平臺,包括Linux,macOS,Android和iOS。如果你想看看他是如何做到的,並跟隨未來的更新,他將他的編碼課程以視訊的形式提供,程式碼也可以在GitHub上獲得。如果要從Linux上安裝遊戲,你可以從Snap Store上把它拉下來。
概要
通過這個alpha版本以及Google和Canonical之間的緊密合作,Linux開發者可以為他們選擇的作業系統獲得Flutter支援。通過快照安裝Flutter SDK。使用Visual Studio Code或Android Studio在Linux上構建和測試你的桌面應用。將您的應用部署到Snap Store。最新的細節,請看flutter.dev上的桌面頁面。最重要的是,一定要提供反饋,這樣我們才能繼續讓Flutter在Linux上做到最好,就像我們努力為每個支援的Flutter平臺做的那樣。
來自Canonical團隊的Flutter for Linux是我們的夢想向前邁出的一大步,讓Flutter成為構建應用的最佳方式,無論你的目標是哪個平臺。針對桌面平臺,使得Flutter引擎對谷歌本身無法直接支援的長尾裝置的適應性更強,但我們計劃繼續為這些裝置建立合作伙伴關係,並啟用生態系統。
只要有裝置需要快速、漂亮的應用,那就是我們希望Flutter出現的地方。
通過www.DeepL.com/Translator(免費版)翻譯