到目前爲止,Flutter雖沒有在桌面端發力,但仍然提供了直接將Flutter App項目打包到桌面端的途徑。在我們看來,這更像一種實驗性質的嘗試。無論如何,我還是相信Flutter在跨平臺UI方面的優秀表現,現在就讓我們來體驗一下Flutter在桌面上的表現吧。
直接使用 flutter-desktop-embedding 打包體驗並不友好,像很多其他的框架一樣,我們需要一個腳手架來輔助,這裏推薦 go-flutter-desktop 項目,這是一個Go語言開發的將Flutter App打包爲桌面程序的庫。Go語言也是我非常喜歡的語言!
關於Flutter環境搭建等等基礎就不說了,默認讀者具備Flutter開發能力,接下來請看詳細步驟
步驟一:搭建環境
-
flutter 環境略
-
golang
go 語言開發環境 -
hover
go-flutter-desktop 提供的腳手架工具
先看Go語言環境準備
- 訪問Go語言中文網 下載相應的包,記住要下載最新的版本,本篇以Windows爲例,下載
go1.12.5.windows-amd64.msi
。如你本地已安裝舊的Go版本,請務必更新到最新的 - 指定安裝目錄,點擊安裝
- 配置環境變量。安裝完成後,將安裝目錄下的
bin
目錄加入到系統環境變量Path中,也就是go.exe
所在的路徑加入到環境變量Path中。 - 檢查環境。打開cmd命令行,輸入
go env
,成功輸出Go的環境路徑,則Go環境完成。
說明,如大家還有興趣學習Go語言的開發,則還需要配置GOPATH
環境變量。
下載安裝 hover 庫。這是一個Go語言庫
在cmd命令行執行以下命令安裝,如網絡不穩定,可能需要一定時間
go get -u github.com/go-flutter-desktop/hover
步驟二:創建工程
若沒有現成的Flutter 工程,先創建一個。請先確保Flutter環境正常可用
flutter create myapp
cd 到 flutter 項目路徑下,即myapp
下。這裏以創建的測試工程爲例,進入到myapp
下的lib
文件夾,將main.dart
刪除。由於flutter桌面項目的特殊要求,因此這裏需要給工程配置兩個入口文件,分別創建main.dart
、main_desktop.dart
文件,注意文件名是固定的,不可隨意修改。然後在創建一個app.dart
文件,這裏充當我們測試app的具體代碼,命名無要求
main.dart
代碼如下,這是移動端app需要用到的入口代碼
import 'package:flutter/material.dart';
import 'app.dart';
void main() => runApp(MyApp());
main_desktop.dart
內容如下,這是桌面端需要的入口代碼
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart' show debugDefaultTargetPlatformOverride;
import 'app.dart';
void main() {
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
runApp(MyApp());
}
app.dart
內容如下,UI的實際代碼,即在屏幕上顯示一個Hello World!
import 'package:flutter/material.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(appBar: AppBar(title: Text("Demo")),
body: Center(child: Text('Hello World!'),),
);
}
}
步驟三:初始化爲桌面工程
在Flutter項目的根路徑下,有android目錄和ios目錄,但沒有桌面端的編譯目錄,這一步即是藉助hover 庫自動生成桌面端的項目編譯目錄
確保當前命令行環境在myapp
項目路徑下,否則cd過去,然後執行以下命令
hover init github.com/my-organization/myapp
如果你有相應的github項目路徑,請修改爲自己的,否則可以像上面一樣隨便寫一個。本例中是一個測試工程,沒上傳到GitHub,這裏隨便寫了一個。注意這裏的坑,這個GitHub路徑是必須要寫的,否則無法正常打包,這可能是該腳手架工具的BUG
步驟四:運行與打包
如你需要以熱加載啓動app,請在當前命令行中執行hover run
,注意,此時會聯網下載一些依賴,會耗費一些時間,而且還要看人品,根據自己的網絡情況,被牆也是很有可能的。如果你在後臺使用了Socks5
代理,則會發生遠程服務器關閉連接的錯誤,請關閉Socks5
代理,開啓Http代理
依賴準備完成後,會啓動app
如需替換圖標和資源,可以進入我們生成的項目下的desktop
路徑下的assets
目錄操作
打包爲可執行程序
還可以使用hover build
命令打包爲exe
可執行文件,進入項目下的desktop\build\outputs\windows
路徑查看
還存在的問題
如果大家有現成的Flutter App,可以按照以上步驟打包成桌面程序進行嘗試,只需要注意分離出桌面端的入口文件main_desktop.dart
即可,目前直接將Flutter App打包爲桌面端程序,仍然會存在一些可能的兼容性問題,另外go-flutter-desktop
項目還不支持發佈模式,僅支持調試模式,這意味着編出來的桌面程序,始終有一個黑框控制檯,且不斷的輸出日誌。
參考:
https://github.com/go-flutter-desktop/hover