GO Flutter Desktop Mac版小白体验
go-flutter-desktop 嗯,这个项目也是已经存在很久了,使用Go 和 GLFW 技术实现。因为前两天在大佬的带领下体验了官方的desktop项目,大家一般都会将官方项目和go-flutter来进行对比。
虽然这个项目叫go-flutter-desktop,但是开发还是使用的Dart语言来写Flutter啦(平台化插件需要使用go语言来调用MethodChannel),这个项目只不过是对Flutter暴露的 Flutter's Embedding API 进行了实现,使之能够运行在Windows, MacOS和 Linux而已。简单点说就是,GO语言负责自定义 Flutter Engine Embedders使Flutter可以运行在其他平台 ,GLFW负责渲染工作。
在Mac上编译起来依然很简单,没什么坑。
准备工作
你需要安装go环境,以及hover工具(编译打包运行都使用这个hover)
Step 1
使用brew install go
命令来安装go环境,go version
查看go版本基金可以判断是否安装成功了:

然后打开
.bash_profile
配置环境变量,
export GOPATH =/Users/yumi/go
export PATH=$PATH:$GOPATH/bin
GOPATH
的值对应于go env
命令行中的GOPATH
:

Step 2
使用go get -u github.com/go-flutter-desktop/hover
命令安装hover
工具,默认会安装到GOPATH/bin
目录里面,上边配置的第二个环境变量就是为了能够方便使用hover命令。安装完成后输入hover -h
检查是否安装成功:

运行demo
我们可以clone官方example:https://github.com/go-flutter-desktop/examples.git ,然后进入项目目录(这里以pointer_demo为例),拉取pub依赖后,hover run
就搞定啦:
cd flutter-examples/pointer_demo
flutter pub get
hover run
将已有项目更改为desktop项目
因为涉及到平台,纯Dart项目可以使用命令行hover init [project] [flags]
一键更改为desktop项目。以官方gallery项目为例:
cd flutter_gallery
flutter pub get
hover init /Users/yumi/Documents/yumi/demo/flutter/flutter_gallery
hover run
这里注意,hover init 的目录,官方建议是链接到 git 服务,我这边是测试的所以没这么写,建议类似这样:hover init github.com/my-organization/simpleApplication
(目录随便编一个也行,不一定要是github真实存在的项目,我这边写本地路径init也是OK的)。
hover init requires a project path. This is usualy the path for your project on github or a self-hosted git service. If you are unsure, just make something up, it can always be changed later.
第一次运行会报错:
Target file "lib/main_desktop.dart" not found.
这是因为go-flutter的默认入口文件是lib/main_desktop.dart
,所以我们新建一个main_desktop.dart
文件,把``main.dart```里面的东西复制进去即可:
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'gallery/app.dart';
void main() {
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
runApp(const GalleryApp());
}
记得指定debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;

关于插件
Question 1:是否可以使用pub上的库?
同官方desktop,纯Dart的库是可以使用的;平台化插件类似于Flutter,使用MethodChannel通信(go语言编写)
Question 2:如何编写插件?
create-a-plugin这里介绍了如何创建一个插件;plugins这里有官方的插件例子。
插件目录官方建议放在 GOPATH/src/github.com/
目录下。具体看低调大佬的文章:创建并编写插件
Question 3:插件如何使用?
可以本地引用 or 发布到github给其他人使用。具体依然看低调大佬的文章:发布插件
关于打包
使用hover build
命令可以在desktop/build
目录下生成一个exec的Unix可执行文件(Mac下),双击可以打开App。不同的平台会生成不同的目录,desktop/build/outputs/linux
or desktop/build/outputs/windows
or desktop/build/outputs/darwin
,win平台可以直接生成exe
文件,这点上来说还是比较方便的。
在Mac平台下,从demo项目来看,这个产物其实就是个.app
,你可以强行重命名成xxx.app
,然后转化成.dmg
文件即可。
但是用法海大佬的项目实际测试打包的时候,直接改名并不可用,需要自己构建.app
包,具体可以看低调大佬的文章: go 二进制程序打包为 mac app(dmg) ,建议还是自己构建.app
包比较靠谱。