Flutter App打包爲桌面端程序

到目前爲止,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語言環境準備

  1. 訪問Go語言中文網 下載相應的包,記住要下載最新的版本,本篇以Windows爲例,下載 go1.12.5.windows-amd64.msi。如你本地已安裝舊的Go版本,請務必更新到最新的
  2. 指定安裝目錄,點擊安裝
  3. 配置環境變量。安裝完成後,將安裝目錄下的bin目錄加入到系統環境變量Path中,也就是go.exe所在的路徑加入到環境變量Path中。
  4. 檢查環境。打開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.dartmain_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

歡迎關注我的公衆號:編程之路從0到1

編程之路從0到1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章