A Go (golang) Custom Flutter Engine Embedder for desktop
This project doesn't compete with this awesome one. The purpose of this project is to support the Flutter framework on Windows, MacOS, and Linux using a SINGLE code base.
GLFW fits the job because it provides the right abstractions over the OpenGL's Buffer/mouse/keyboard for each platform.
The choice of Golang comes from the fact that it
has the same tooling on every platform.
Plus golang is a great language because it keeps everything simple and readable,
which, I hope, will encourage people to contribute 😁.
For this Flutter version:
$ flutter --version
Flutter 0.7.3 • channel beta • https://github.com/flutter/flutter.git
Framework • revision 3b309bda07 (2 weeks ago) • 2018-08-28 12:39:24 -0700
Engine • revision af42b6dc95
Tools • Dart 2.1.0-dev.1.0.flutter-ccb16f7282
📦 🐧 Linux
Check out the Release page for prebuilt versions.Go read first: go-gl/glfw
# Clone
git clone https://github.com/Drakirus/go-flutter-desktop-embedder.git
cd go-flutter-desktop-embedder
# Build the flutter simpleDemo project
cd example/simpleDemo/
cd flutter_project/demo/
flutter build bundle
cd ../..
# Download the share library (CORRESPONDING to the Flutter's version shown above)
wget https://storage.googleapis.com/flutter_infra/flutter/af42b6dc95bd9f719e43c4e9f29a00640f0f0bba/linux-x64/linux-x64-embedder -O .build/temp.zip
# Extract the share library
unzip .build/temp.zip -x flutter_embedder.h
# REQUIRED before every `go build`. The CGO compiler need to know where to look for the share library
export CGO_LDFLAGS="-L${PWD}"
# The share library must stay next to the generated binary.
# Get the libraries
go get -u -v github.com/Drakirus/go-flutter-desktop-embedder
# Make sure the path in "main.go" to the `icudtl.dat` is correct.
# Build the example project
go build
# `go run main.go` is not working ATM.
📦 🏁 Windows
Check out the Release page for prebuilt versions.Go read first: go-gl/glfw
# Clone
git clone https://github.com/Drakirus/go-flutter-desktop-embedder.git
cd go-flutter-desktop-embedder
# Build the flutter simpleDemo project
cd example/simpleDemo/
cd flutter_project/demo/
flutter build bundle
cd ../..
# Download the share library (CORRESPONDING to the Flutter's version shown above)
# => https://storage.googleapis.com/flutter_infra/flutter/af42b6dc95bd9f719e43c4e9f29a00640f0f0bba/windows-x64/windows-x64-embedder.zip
# Move the share library
# => "flutter_engine.dll" must be in the flutter example project (where the main.go is)
# REQUIRED before every `go build`. The CGO compiler need to know where to look for the share library
set CGO_LDFLAGS=-L%cd%
# The share library must stay next to the generated binary.
# Get the libraries
go get -u -v github.com/Drakirus/go-flutter-desktop-embedder
# Make sure the path in "main.go" to the `icudtl.dat` is correct.
# Build the example project
go build
# `go run main.go` is not working ATM.
📦 🍎 MacOS
Check out the Release page for prebuilt versions.Go read first: go-gl/glfw
# Clone
git clone https://github.com/Drakirus/go-flutter-desktop-embedder.git
cd go-flutter-desktop-embedder
# Build the flutter simpleDemo project
cd example/simpleDemo/
cd flutter_project/demo/
flutter build bundle
cd ../..
# Download the share library (CORRESPONDING to the Flutter's version shown above)
wget https://storage.googleapis.com/flutter_infra/flutter/af42b6dc95bd9f719e43c4e9f29a00640f0f0bba/darwin-x64/FlutterEmbedder.framework.zip -O .build/temp.zip
# Move the share library
unzip .build/temp.zip -d .build && unzip .build/FlutterEmbedder.framework.zip -d .build/FlutterEmbedder.framework
mv .build/FlutterEmbedder.framework .
# REQUIRED before every `go build`. The CGO compiler need to know where to look for the share library
export CGO_LDFLAGS="-F${PWD} -Wl,-rpath,@executable_path"
# The share library must stay next to the generated binary.
# Get the libraries
go get -u -v github.com/Drakirus/go-flutter-desktop-embedder
# Make sure the path in "main.go" to the `icudtl.dat` is correct.
# Build the example project
go build
# `go run main.go` is not working ATM.
The examples are available here.
- Linux 🐧
- Windows 🏁
- MacOS 🍎
- Importable go library
- Plugins Medium article on how the the Flutter's messaging works
- JSON MethodChannel
- StandardMethodCodec, ...
- System plugins Platform channels used by the Flutter system
- Window Title
- Text input
- Clipboard (through shortcuts)
- Clipboard (through the click)
- Keyboard shortcuts
- ctrl-c ctrl-v ctrl-x ctrl-a
- Home End shift-Home shift-End
- Left ctrl-Left ctrl-shift-Left
- Right ctrl-Right ctrl-shift-Right
- Backspace ctrl-Backspace Delete
- ctrl-Delete
- Key events