go-flutter-desktop-embedder
go-flutter-desktop-embedder copied to clipboard
A Go (golang) Custom Flutter Engine Embedder for desktop
Go Flutter desktop embedder
:warning: Warning: this project has been moved to its own organization.
Please take a look at its new location: github.com/go-flutter-desktop
A Go (golang) Custom Flutter Engine Embedder for desktop
Purpose
Disclaimer: Yes this project has the same goals as google/FDE, but I'm having fun and it scratches an itch I have, so I'm gonna keep going!
The flutter engine itself doesn't know how to deal with desktop platforms (eg handling mouse/keyboard input). Instead, it exposes an abstraction layer for whatever platform to implement. The purpose of this project is to implement Flutter's Embedding API using a SINGLE code base that runs on Windows, MacOS, and Linux. 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 :grin:.
How to install
:package: :penguin: Linux
From binaries
Check out the Release page for prebuilt versions.From source
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, the one corresponding to your flutter version.
go run engineDownloader.go
# 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
# Build the example project
go build main.go
# `go run main.go` is not working ATM.
:package: :checkered_flag: Windows
From binaries
Check out the Release page for prebuilt versions.From source
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, the one corresponding to your flutter version.
go run engineDownloader.go
# 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.
# If you ran into a MinGW ld error, checkout: https://github.com/Drakirus/go-flutter-desktop-embedder/issues/34
# Get the libraries
go get -u -v github.com/Drakirus/go-flutter-desktop-embedder
# Build the example project
go build main.go
# `go run main.go` is not working ATM.
:package: :apple: MacOS
From binaries
Check out the Release page for prebuilt versions.From source
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, the one corresponding to your flutter version.
go run engineDownloader.go
# 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
# Build the example project
go build main.go
# `go run main.go` is not working ATM.
Flutter Demos Projects
The examples are available here.
Support
- [x] Linux :penguin:
- [x] Windows :checkered_flag:
- [x] MacOS :apple:
- [x] Importable go library
- [ ] Plugins Medium article on how the the Flutter's messaging works
- [x] JSON MethodChannel
- [ ] StandardMethodCodec, ...
- [ ] System plugins Platform channels used by the Flutter system
- [x] Window Title
- [x] Text input
- [x] Clipboard (through shortcuts and UI)
- [x] Keyboard shortcuts
- [x] ctrl-c ctrl-v ctrl-x ctrl-a
- [x] Home End shift-Home shift-End
- [x] Left ctrl-Left ctrl-shift-Left
- [x] Right ctrl-Right ctrl-shift-Right
- [x] Backspace ctrl-Backspace Delete
- [ ] ctrl-Delete
- [ ] Key events