Flutter on Windows, MacOS and Linux - based on Flutter Embedding, Go and GLFW.

go-flutter - A package that brings Flutter to the desktop

Awesome Flutter Documentation Go Report Card Join the chat at https://gitter.im/go-flutter-desktop/go-flutter

Purpose

Flutter allows you to build beautiful native apps on iOS and Android from a single codebase.

This unofficial project brings Flutter to the desktop through the power of Go and GLFW.

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. This project implements the Flutter's Embedding API using a single code base that runs on Windows, macOS, and Linux. For rendering, 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 makes it easy to build cross-platform plugins.

Screenshot of the Stocks demo app on macOS

Getting started

The best way to get started is to install hover, the official go-flutter tool to set up, build and run Flutter apps on the desktop, including hot-reload.

Read the hover tutorial to run your app on the desktop, or start with one of our example apps.

If you want more in-depth information about go-flutter, read the wiki.

Supported features

  • Linux 🐧
  • MacOS 🍎
  • Windows 🏁
  • Hot Reload
  • Plugin system
    • BinaryMessageCodec, BinaryMessageChannel
    • StandardMessageCodec, JSONMessageCodec
    • StandardMethodCodec, MethodChannel
  • Plugin detection for suppoted plugins
  • Importable as Go library into custom projects
  • UTF-8 Text input
  • Clipboard copy & paste
  • Window title and icon
  • Standard 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
  • Mouse-over/hovering
  • Mouse-buttons
  • RawKeyboard events
  • Distribution format (windows-msi, mac-dmg, linux-appimage, and more)
  • Cross-compiling using docker 🐳

Are you missing a feature? Open an issue!

Examples

A separate repository contains example Flutter apps that also run on the desktop. Go to github.com/go-flutter-desktop/examples to give them a try.

Plugins

Some popular plugins are already implemented over at github.com/go-flutter-desktop/plugins. If you have implemented a plugin that you would like to share, feel free to open a PR on the plugins repository!

For a detailed tutorial on how to create a plugin, read the wiki.

Version compatibility

Flutter version

Flutter itself is a relatively young project. Its framework and engine are updated often. The go-flutter project tries to stay compatible with the beta channel of Flutter.

Go version

Updating Go is simple and Go seldomly has backwards-incompatible changes. This project remains compatible with the latest Go stable release.

GLFW version

This project uses go-gl/glfw for GLFW v3.3.

License

BSD 3-Clause License

Comments
  • Blackscreen after #308

    Blackscreen after #308

    @pchampio After #308 my app only shows a blackscreen and spits out this error on linux (also tested windows with wine and got the same error):

    2019/12/26 12:59:30 error.go:171: PlatformError: GLX: Failed to make context current
    

    When running using hover run -b '@2d582358f34c257933c47e1f0591fc38c713c78c' (the previous commit) the app starts like normal so it's definitely an issue with #308.

  • VSCode Hot reload

    VSCode Hot reload

    Now that it is possible to get automatic hot reload working using https://github.com/google/flutter-desktop-embedding and vscode is there a way now to get it working with hover?

  • Windows: Failed to create OpenGL context

    Windows: Failed to create OpenGL context

    Flutter version

    Flutter 1.9.1+hotfix.1 • channel beta • https://github.com/flutter/flutter
    Framework • revision a1fb3fabec (27 hours ago) • 2019-09-03 18:07:52 -0700
    Engine • revision cc88fa45db
    Tools • Dart 2.5.0
    

    Go Flutter Version

    v0.29.0 
    

    But v0.28.0 work.

    Golang Version

    go version go1.13 windows/amd64
    

    Windows version

    Windows 10 1903
    

    Golang errors (Optional)

    hover: Using engine from cache
    go: finding github.com/go-gl/glfw latest
    go: finding github.com/go-gl/gl latest
    creating glfw window: VersionUnavailable: WGL: Failed to create OpenGL context
    hover: app 'xx' exited with error: exit status 1
    

    Steps to Reproduce

    hover run
    
  • Black screen in windows.

    Black screen in windows.

    Hover doctor

    $ hover doctor
    hover: Running on windows
    hover: Sharing flutter version
    Flutter 1.17.0-3.3.pre • channel beta • https://github.com/flutter/flutter.git
    Framework • revision 0da1ab0922 (3 days ago) • 2020-04-28 11:02:34 -0700
    Engine • revision 376ad6a64b
    Tools • Dart 2.8.0
    hover: Flutter engine commit: https://github.com/flutter/engine/commit/376ad6a64b08aa26005e3f82aed26de2e290b572
    hover: Finding out the C compiler version
    gcc (tdm64-1) 9.2.0
    Copyright (C) 2019 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    hover: Sharing the content of go.mod
    module github.com/go-flutter-desktop/examples/stocks/desktop
    
    go 1.12
    
    require (
            github.com/go-flutter-desktop/go-flutter v0.39.0
            github.com/pkg/errors v0.9.1
    )
    hover: Warning: No hover.yaml file found: open go\hover.yaml: The system cannot find the file specified.
    hover: Sharing the content of go/cmd
    go\cmd\main.go  go\cmd\options.go
    

    Error output

    Using hover build [...] --XXX to build my application, I get the following error:

    WGL: Failed to make context current: The requested resource is in use
    

    I try to build a demo project from examples/stocks for testing. But when I run hover run, I always get a black screen of the application. My windows version is 1909.

  • Build Windows

    Build Windows

    When I try run hover build windows I awalys get this:

    hover: Downloading engine for platform windows-release at version 2c527d6c7e70e2f51bca1a46f1174b250f84c5da...
    hover: Failed to download engine: failed to get Content-Length header: strconv.Atoi: parsing "": invalid syntax
    hover: Engine builds are a bit delayed after they are published in flutter.
    hover: You can either try again later or switch the flutter channel to beta, because these engines are more likely to be already built.
    hover: To dig into the already built engines look at https://github.com/flutter-rs/engine-builds/releases and https://github.com/flutter-rs/engine-builds/actions
    
  • Hover 0.44.0 segfault on `hover run` in Linux

    Hover 0.44.0 segfault on `hover run` in Linux

    hover doctor -v                                                        
    13:59:12 doctor.go:39: hover: Hover version v0.44.0 running on linux
    13:59:12 doctor.go:41: hover: Sharing flutter version
    Flutter 1.23.0-18.1.pre • channel beta • https://github.com/flutter/flutter.git
    Framework • revision 198df796aa (5 days ago) • 2020-10-15 12:04:33 -0700
    Engine • revision 1d12d82d9c
    Tools • Dart 2.11.0 (build 2.11.0-213.1.beta)
    13:59:16 doctor.go:51: hover: Flutter engine commit: https://github.com/flutter/engine/commit/1d12d82d9cb54876f58044aa52198d53ec841c3d
    13:59:17 doctor.go:63: hover: Finding out the C compiler version
    gcc (GCC) 10.2.0
    Copyright (C) 2020 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    13:59:17 doctor.go:70: hover: Sharing the content of go.mod
    module trackself/go
    
    go 1.14
    
    require (
            github.com/JanezStupar/flutter_systray/go v0.3.1
            github.com/Xuanwo/go-locale v1.0.0 // indirect
            github.com/getlantern/golog v0.0.0-20200929154820-62107891371a // indirect
            github.com/getlantern/ops v0.0.0-20200403153110-8476b16edcd6 // indirect
            github.com/getlantern/systray v1.0.5 // indirect
            github.com/go-flutter-desktop/go-flutter v0.42.0
            github.com/go-flutter-desktop/plugins/path_provider v0.4.0
            github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200707082815-5321531c36a2 // indirect
            github.com/miguelpruivo/flutter_file_picker/go v0.0.0-20200913011135-405fd7f97798
            github.com/pkg/errors v0.9.1
            github.com/shurcooL/trayhost v0.0.0-20181020202213-114974ef9e16 // indirect
            golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13 // indirect
            gopkg.in/yaml.v2 v2.2.4 // indirect
    )
    13:59:17 doctor.go:84: hover: Sharing the content of hover.yaml
    application-name: Track.Self
    executable-name: trackself
    package-name: trackself
    license: UNLICENSED
    target: lib/main_desktop.dart
    branch: ""
    cache-path: ""
    opengl: ""
    engine-version: ""
    13:59:17 doctor.go:93: hover: Sharing the content of go/cmd
    go/cmd/import-file_picker-plugin.go     go/cmd/import-flutter_systray-plugin.go go/cmd/import-path_provider-plugin.go   go/cmd/main.go  go/cmd/options.go
    
    

    Output of hover run. Note that the same process works fine with hover 0.43.0

    hover run                 
    hover: Downloading engine for platform linux-debug_unopt at version 1d12d82d9cb54876f58044aa52198d53ec841c3d...                                               
    Download completed in 205.28s                                           
    hover: Cleaning the build directory                                     
    hover: Bundling flutter app                                             
    Running "flutter pub get" in desktopapp...                          1.4s                                                                                      
    Font subsetting is not supported in debug mode. The --tree-shake-icons flag will be ignored.                                                                  
    hover: Compiling 'go-flutter' and plugins
    # github.com/shurcooL/trayhost                                
    In file included from /usr/include/gtk-2.0/gtk/gtkobject.h:37,
                     from /usr/include/gtk-2.0/gtk/gtkwidget.h:36,   
                     from /usr/include/gtk-2.0/gtk/gtkcontainer.h:35,
                     from /usr/include/gtk-2.0/gtk/gtkbin.h:35,   
                     from /usr/include/gtk-2.0/gtk/gtkwindow.h:36,
                     from /usr/include/gtk-2.0/gtk/gtkdialog.h:35,     
                     from /usr/include/gtk-2.0/gtk/gtkaboutdialog.h:32,
                     from /usr/include/gtk-2.0/gtk/gtk.h:33,                                                                                                      
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/linux/tray.c:7,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/platform.h:8,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/trayhost.go:20:
    /usr/include/gtk-2.0/gtk/gtktypeutils.h:236:1: warning: ‘GTypeDebugFlags’ is deprecated [-Wdeprecated-declarations]                                           
      236 | void            gtk_type_init   (GTypeDebugFlags    debug_flags);
          | ^~~~                                                     
    In file included from /usr/include/glib-2.0/gobject/gobject.h:24, 
                     from /usr/include/glib-2.0/gobject/gbinding.h:29,
                     from /usr/include/glib-2.0/glib-object.h:22, 
                     from /usr/include/glib-2.0/gio/gioenums.h:28,
                     from /usr/include/glib-2.0/gio/giotypes.h:28,
                     from /usr/include/glib-2.0/gio/gio.h:26,               
                     from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
                     from /usr/include/gtk-2.0/gdk/gdk.h:32,
                     from /usr/include/gtk-2.0/gtk/gtk.h:32,                                                                                                      
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/linux/tray.c:7,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/platform.h:8,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/trayhost.go:20:                                 
    /usr/include/glib-2.0/gobject/gtype.h:679:1: note: declared here
      679 | {
          | ^                                                       
    In file included from /usr/include/gtk-2.0/gtk/gtktoolitem.h:31,  
                     from /usr/include/gtk-2.0/gtk/gtktoolbutton.h:30,    
                     from /usr/include/gtk-2.0/gtk/gtkmenutoolbutton.h:30,
                     from /usr/include/gtk-2.0/gtk/gtk.h:126,                                                                                                     
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/linux/tray.c:7,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/platform.h:8,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/trayhost.go:20:      
    /usr/include/gtk-2.0/gtk/gtktooltips.h:73:3: warning: ‘GTimeVal’ is deprecated: Use 'GDateTime' instead [-Wdeprecated-declarations]                           
       73 |   GTimeVal last_popdown;
          |   ^~~~~~~~                                            
    In file included from /usr/include/glib-2.0/glib/galloca.h:32,
                     from /usr/include/glib-2.0/glib.h:30,            
                     from /usr/include/glib-2.0/gobject/gbinding.h:28,
                     from /usr/include/glib-2.0/glib-object.h:22, 
                     from /usr/include/glib-2.0/gio/gioenums.h:28,
                     from /usr/include/glib-2.0/gio/giotypes.h:28,
                     from /usr/include/glib-2.0/gio/gio.h:26,               
                     from /usr/include/gtk-2.0/gdk/gdkapplaunchcontext.h:30,
                     from /usr/include/gtk-2.0/gdk/gdk.h:32,
                     from /usr/include/gtk-2.0/gtk/gtk.h:32,                                                                                                      
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/linux/tray.c:7,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/platform/platform.h:8,
                     from /home/janez/go/pkg/mod/github.com/shurcoo!l/[email protected]/trayhost.go:20:                                 
    /usr/include/glib-2.0/glib/gtypes.h:547:8: note: declared here
      547 | struct _GTimeVal
          |        ^~~~~~~~~                                                       
    hover: Successfully compiled executable binary for linux  
    hover: Build finished, starting app...                          
    hover: Running trackself in debug_unopt mode                                                                                                                                                                                                                                                                                 
    go-flutter: calculated pixelRatio limited to a minimum of 1.0. metrics: {"dpi":93.78461538461538,"monitorWidthMm":520,"monitorWidthSc":1920,"mscpi":93.78461538461538,"pixelRatio":0.5861538461538461,"ppsc":1,"windowWidthPx":360,"windowWidthSc":360}                                                                      
    flutter: Observatory listening on http://127.0.0.1:50300/                
    hover: Connecting hover to 'trackself' for hot reload                                                                                                         
    hover: App 'trackself' exited with error: signal: segmentation fault (core dumped)                                                                            
    Error connecting to the service protocol: failed to connect to http://127.0.0.1:50300/                                          
    
  • "hover build linux-snap" failing on MacOS

    to Reproduce:

    https://github.com/winwisely99/enrollment-mod

    make flu-desk-pack

    It tries to build all 3 linux types. debian works ( hence i closed this issue: https://github.com/go-flutter-desktop/go-flutter/issues/284) snap fails...

    d /Users/apple/workspace/go/src/github.com/winwisely99/enrollment-mod/enrollment && hover build linux-snap
    hover: Using engine from cache
    hover: Cleaning the build directory
    hover: ⚠ The go-flutter project tries to stay compatible with the beta channel of Flutter.
    hover: ⚠     It's advised to use the beta channel: `flutter channel beta`
    hover: Bundling flutter app
    hover: Because darwin is not able to compile for linux out of the box, a cross-compiling container is used
    Sending build context to Docker daemon  2.048kB
    Step 1/2 : FROM dockercore/golang-cross
     ---> e9c59db2dea3
    Step 2/2 : RUN apt-get update && apt-get install libgl1-mesa-dev xorg-dev -y
     ---> Using cache
     ---> 53dfbc3de38e
    Successfully built 53dfbc3de38e
    Successfully tagged hover-build-cc:latest
    hover: Cross-Compiling 'go-flutter' and plugins using docker
    hover: Successfully cross-compiled for linux
    hover: Packaging snap in /var/folders/wp/ff6sz9qs6g71jnm12nj2kbyw0000gp/T/hover-build-enrollment-linux-snap000263251
    Sending build context to Docker daemon  5.632kB
    Step 1/1 : FROM snapcore/snapcraft
    latest: Pulling from snapcore/snapcraft
    16c48d79e9cc: Pull complete 
    3c654ad3ed7d: Pull complete 
    6276f4f9c29d: Pull complete 
    a4bd43ad48ce: Pull complete 
    b05a6d825956: Pull complete 
    113e1c5c1910: Pull complete 
    1264ad5fe4e7: Pull complete 
    c4733adb6584: Pull complete 
    Digest: sha256:c35c269b969a85a361b3c7bb7fb75edd68f130fac07de14ee7d5258dad8a2c6d
    Status: Downloaded newer image for snapcore/snapcraft:latest
     ---> 3f1fc68a4f8a
    Successfully built 3f1fc68a4f8a
    Successfully tagged hover-build-packaging-linux-snap:latest
    The following snaps are required but not installed as snapcraft is running inside docker or podman container: core18.
    Please ensure the environment is properly setup before continuing.
    Ignore this message if the appropriate measures have already been taken
    Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]
    Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
    Get:3 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]
    Get:4 http://archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
    Get:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB]
    Get:6 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB]
    Get:7 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages [973 kB]
    Get:8 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB]
    Get:9 http://security.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.7 kB]
    Get:10 http://archive.ubuntu.com/ubuntu xenial/multiverse amd64 Packages [176 kB]
    Get:11 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [587 kB]
    Get:12 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [1350 kB]
    Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [13.1 kB]
    Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [991 kB]
    Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 Packages [19.2 kB]
    Get:16 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 Packages [6276 B]
    Get:17 http://archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages [7942 B]
    Get:18 http://archive.ubuntu.com/ubuntu xenial-backports/universe amd64 Packages [8807 B]
    Fetched 16.1 MB in 0s (0 B/s)
    Get:1 libxdmcp6_1.1.2-1.1_amd64.deb [11.0 kB]
    Fetched 11.0 kB in 0s (0 B/s)
    Get:1 libdrm-nouveau2_2.4.91-2~16.04.1_amd64.deb [16.3 kB]
    Fetched 16.3 kB in 0s (0 B/s)
    Get:1 libpciaccess0_0.13.4-1_amd64.deb [18.1 kB]
    Fetched 18.1 kB in 0s (0 B/s)
    Get:1 libxcb-present0_1.11.1-1ubuntu1_amd64.deb [5218 B]
    Fetched 5218 B in 0s (0 B/s)
    Get:1 libglapi-mesa_18.0.5-0ubuntu0~16.04.1_amd64.deb [23.4 kB]
    Fetched 23.4 kB in 0s (0 B/s)
    Get:1 libxrender1_0.9.9-0ubuntu1_amd64.deb [18.5 kB]
    Fetched 18.5 kB in 0s (0 B/s)
    Get:1 libelf1_0.165-3ubuntu1.2_amd64.deb [43.5 kB]
    Fetched 43.5 kB in 0s (0 B/s)
    Get:1 libbsd0_0.8.2-1_amd64.deb [41.7 kB]
    Fetched 41.7 kB in 0s (0 B/s)
    Get:1 zlib1g_1.2.8.dfsg-2ubuntu4.1_amd64.deb [51.2 kB]
    Fetched 51.2 kB in 0s (0 B/s)
    Get:1 libxcursor1_1.1.14-1ubuntu0.16.04.2_amd64.deb [19.9 kB]
    Fetched 19.9 kB in 0s (0 B/s)
    Get:1 gcc-6-base_6.0.1-0ubuntu1_amd64.deb [14.3 kB]
    Fetched 14.3 kB in 0s (0 B/s)
    Get:1 libx11-6_1.6.3-1ubuntu2.1_amd64.deb [570 kB]
    Fetched 570 kB in 0s (0 B/s)
    Get:1 libexpat1_2.1.0-7ubuntu0.16.04.5_amd64.deb [71.5 kB]
    Fetched 71.5 kB in 0s (0 B/s)
    Get:1 libxshmfence1_1.2-1_amd64.deb [5042 B]
    Fetched 5042 B in 0s (0 B/s)
    Get:1 libgcc1_6.0.1-0ubuntu1_amd64.deb [38.5 kB]
    Fetched 38.5 kB in 0s (0 B/s)
    Get:1 libdrm-amdgpu1_2.4.91-2~16.04.1_amd64.deb [18.9 kB]
    Fetched 18.9 kB in 0s (0 B/s)
    Get:1 libllvm6.0_6.0-1ubuntu2~16.04.1_amd64.deb [14.3 MB]
    Fetched 14.3 MB in 0s (0 B/s)
    Get:1 libxau6_1.0.8-1_amd64.deb [8376 B]
    Fetched 8376 B in 0s (0 B/s)
    Get:1 libtinfo5_6.0+20160213-1ubuntu1_amd64.deb [76.8 kB]
    Fetched 76.8 kB in 0s (0 B/s)
    Get:1 libxcb1_1.11.1-1ubuntu1_amd64.deb [40.0 kB]
    Fetched 40.0 kB in 0s (0 B/s)
    Get:1 libxinerama1_1.1.3-1_amd64.deb [7908 B]
    Fetched 7908 B in 0s (0 B/s)
    Get:1 libxrandr2_1.5.0-1_amd64.deb [17.6 kB]
    Fetched 17.6 kB in 0s (0 B/s)
    Get:1 libdrm2_2.4.91-2~16.04.1_amd64.deb [30.8 kB]
    Fetched 30.8 kB in 0s (0 B/s)
    Get:1 libglu1-mesa_9.0.0-2.1_amd64.deb [168 kB]
    Fetched 168 kB in 0s (0 B/s)
    Get:1 libxfixes3_5.0.1-2_amd64.deb [11.1 kB]
    Fetched 11.1 kB in 0s (0 B/s)
    Get:1 libx11-data_1.6.3-1ubuntu2.1_all.deb [113 kB]
    Fetched 113 kB in 0s (0 B/s)
    Get:1 libgl1-mesa-dri_18.0.5-0ubuntu0~16.04.1_amd64.deb [6080 kB]
    Fetched 6080 kB in 0s (0 B/s)
    Get:1 libxxf86vm1_1.1.4-1_amd64.deb [10.6 kB]
    Fetched 10.6 kB in 0s (0 B/s)
    Get:1 libxdamage1_1.1.4-2_amd64.deb [6946 B]
    Fetched 6946 B in 0s (0 B/s)
    Get:1 libgl1-mesa-glx_18.0.5-0ubuntu0~16.04.1_amd64.deb [132 kB]
    Fetched 132 kB in 0s (0 B/s)
    Get:1 libedit2_3.1-20150325-1ubuntu2_amd64.deb [76.5 kB]
    Fetched 76.5 kB in 0s (0 B/s)
    Get:1 libdrm-intel1_2.4.91-2~16.04.1_amd64.deb [59.9 kB]
    Fetched 59.9 kB in 0s (0 B/s)
    Get:1 libffi6_3.2.1-4_amd64.deb [17.8 kB]
    Fetched 17.8 kB in 0s (0 B/s)
    Get:1 libdrm-radeon1_2.4.91-2~16.04.1_amd64.deb [21.5 kB]
    Fetched 21.5 kB in 0s (0 B/s)
    Get:1 libstdc++6_5.4.0-6ubuntu1~16.04.11_amd64.deb [393 kB]
    Fetched 393 kB in 0s (0 B/s)
    Get:1 libxcb-glx0_1.11.1-1ubuntu1_amd64.deb [20.9 kB]
    Fetched 20.9 kB in 0s (0 B/s)
    Get:1 libxcb-dri2-0_1.11.1-1ubuntu1_amd64.deb [6882 B]
    Fetched 6882 B in 0s (0 B/s)
    Get:1 libsensors4_3.4.0-2_amd64.deb [28.4 kB]
    Fetched 28.4 kB in 0s (0 B/s)
    Get:1 libxcb-dri3-0_1.11.1-1ubuntu1_amd64.deb [5218 B]
    Fetched 5218 B in 0s (0 B/s)
    Get:1 libx11-xcb1_1.6.3-1ubuntu2.1_amd64.deb [9044 B]
    Fetched 9044 B in 0s (0 B/s)
    Get:1 libxcb-sync1_1.11.1-1ubuntu1_amd64.deb [8324 B]
    Fetched 8324 B in 0s (0 B/s)
    Get:1 libxext6_1.3.3-1_amd64.deb [29.4 kB]
    Fetched 29.4 kB in 0s (0 B/s)
    Get:1 libdrm-common_2.4.91-2~16.04.1_all.deb [4764 B]
    Fetched 4764 B in 0s (0 B/s)
    Pulling app 
    Pulling assets 
    Pulling desktop 
    Building app 
    Building assets 
    Building desktop 
    Staging app 
    Sorry, an error occurred in Snapcraft:
    [Errno 17] File exists: 'libbsd.so.0.8.2' -> '/app/stage/lib/x86_64-linux-gnu/libbsd.so.0'
    Traceback (most recent call last):
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/file_utils.py", line 109, in link_or_copy
        link(source, destination, follow_symlinks=follow_symlinks)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/file_utils.py", line 143, in link
        os.link(source_path, destination, follow_symlinks=False)
    OSError: [Errno 5] Input/output error: '/app/parts/app/install/lib/x86_64-linux-gnu/libbsd.so.0' -> '/app/stage/lib/x86_64-linux-gnu/libbsd.so.0'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/snap/snapcraft/current/bin/snapcraft", line 11, in <module>
        load_entry_point('snapcraft==3.8', 'console_scripts', 'snapcraft')()
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/core.py", line 764, in __call__
        return self.main(*args, **kwargs)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/core.py", line 717, in main
        rv = self.invoke(ctx)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/core.py", line 1114, in invoke
        return Command.invoke(self, ctx)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/core.py", line 956, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/core.py", line 555, in invoke
        return callback(*args, **kwargs)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/decorators.py", line 17, in new_func
        return f(get_current_context(), *args, **kwargs)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/cli/_runner.py", line 103, in run
        snap_command.invoke(ctx)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/cli/_command.py", line 87, in invoke
        return super().invoke(ctx)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/core.py", line 956, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/click/core.py", line 555, in invoke
        return callback(*args, **kwargs)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/cli/lifecycle.py", line 261, in snap
        _execute(steps.PRIME, parts=[], pack_project=True, output=output, **kwargs)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/cli/lifecycle.py", line 66, in _execute
        lifecycle.execute(step, project_config, parts)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/lifecycle/_runner.py", line 94, in execute
        executor.run(step, part_names)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/lifecycle/_runner.py", line 148, in run
        self._handle_step(part_names, part, step, current_step, cli_config)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/lifecycle/_runner.py", line 162, in _handle_step
        getattr(self, "_run_{}".format(current_step.name))(part)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/lifecycle/_runner.py", line 226, in _run_stage
        self._run_step(step=steps.STAGE, part=part, progress="Staging")
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/lifecycle/_runner.py", line 281, in _run_step
        getattr(part, step.name)()
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/pluginhandler/__init__.py", line 740, in stage
        self._do_runner_step(steps.STAGE)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/pluginhandler/__init__.py", line 242, in _do_runner_step
        return getattr(self._runner, "{}".format(step.name))()
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/pluginhandler/_runner.py", line 84, in stage
        "override-stage", self._override_stage_scriptlet, self._stagedir
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/pluginhandler/_runner.py", line 137, in _run_scriptlet
        scriptlet_name, function_call.strip()
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/pluginhandler/_runner.py", line 193, in _handle_builtin_function
        function(**function_args)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/pluginhandler/__init__.py", line 762, in _do_stage
        fixup_func=fixup_func,
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/internal/pluginhandler/__init__.py", line 1125, in _migrate_files
        file_utils.link_or_copy(src, dst, follow_symlinks=follow_symlinks)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/file_utils.py", line 117, in link_or_copy
        copy(source, destination, follow_symlinks=follow_symlinks)
      File "/snap/snapcraft/current/lib/python3.5/site-packages/snapcraft/file_utils.py", line 166, in copy
        shutil.copy2(source, destination, follow_symlinks=follow_symlinks)
      File "/snap/snapcraft/current/usr/lib/python3.5/shutil.py", line 251, in copy2
        copyfile(src, dst, follow_symlinks=follow_symlinks)
      File "/snap/snapcraft/current/usr/lib/python3.5/shutil.py", line 112, in copyfile
        os.symlink(os.readlink(src), dst)
    FileExistsError: [Errno 17] File exists: 'libbsd.so.0.8.2' -> '/app/stage/lib/x86_64-linux-gnu/libbsd.so.0'
    You can find the traceback in file '/tmp/tmpf46sgiyb/trace.txt'.
    hover: Docker run failed: exit status 1
    make: *** [flu-desk-pack] Error 1
    
  • Need code review for file_picker plungin and test on darwin / linux before merge to pub.dev

    Need code review for file_picker plungin and test on darwin / linux before merge to pub.dev

    I have tested on Windows 10. It works fine. But I only have Windows, can't test on linux and darwin Could you please help me. Thanks.

    plugin https://github.com/chunhunghan/file_picker

    android https://github.com/chunhunghan/file_picker_example

  • windows-msi build error with docker, linux-deb build not working even though should be possible

    windows-msi build error with docker, linux-deb build not working even though should be possible

    Looks like with the recent updates to hover, its not possible to compile for a platform from different host platform even with the --docker option. Is that the case really ? I am trying to compile ubuntu and windows packages from macOS with the --docker option and I am getting the following output:

    For linux-deb:

    swapn@Swapnils-MacBook-Pro tomatoroapp % hover build linux-deb --docker
    hover: AOT builds currently only work on their host OS
    

    Also I changed the checks in code to allow running linux-deb packaging with docker option, and on trying to build it, got the following error:

    swapn@Swapnils-MacBook-Pro tomatoroapp % hover build linux-deb --docker
    hover: Downloading engine for platform linux-release at version 5babba6c4d25fa237bbf755ab85c9a0c50b3c6ec...
    Download completed in 45.03s
    hover: Failed to strip /Users/swapn/Library/Caches/hover/engine/linux-release/libflutter_engine.so: exit status 1
    

    For windows-msi:

    swapn@Swapnils-MacBook-Pro tomatoroapp % hover build windows-msi --docker
    hover: Using engine from cache
    hover: Building using docker container
    Running this docker command: /usr/local/bin/docker run --rm --mount type=bind,source=/Users/swapn/Documents/Projects/Tomatoro/tomatoroapp,target=/app --mount type=bind,source=/Users/swapn/Library/Caches/hover/engine,target=/root/.cache/hover/engine --mount type=bind,source=/Users/swapn/Library/Caches/hover/docker-go-cache,target=/go-cache --env GOCACHE=/go-cache --env HOVER_SAFE_CHOWN_UID=501 --env HOVER_SAFE_CHOWN_GID=20 --env GOPROXY=https://proxy.golang.org,direct
     --env GOPRIVATE=
     goflutter/hover:latest hover-safe.sh build windows-msi --skip-engine-download --version-number 1.0.20+24
    docker container: docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /host_mnt/Users/swapn/Library/Caches/hover/engine.
    docker container: See 'docker run --help'.
    hover: Docker run failed: exit status 125
    

    Building for linux from docker with macOS shhould be possible since docker on macOS runs inside linux VM. Not sure why the error for windows-msi happens.

    hover doctor output:

    hover: Hover version (devel) running on darwin
    hover: Sharing packaging tools
    hover: darwin-bundle is supported
    hover: darwin-dmg is supported
    hover: darwin-pkg is supported
    hover: Packaging linux-appimage is not supported on darwin
    hover: To still package linux-appimage on darwin you need to run hover with the `--docker` flag.
    hover: Packaging linux-deb is not supported on darwin
    hover: To still package linux-deb on darwin you need to run hover with the `--docker` flag.
    hover: Packaging linux-pkg is not supported on darwin
    hover: To still package linux-pkg on darwin you need to run hover with the `--docker` flag.
    hover: Packaging linux-rpm is not supported on darwin
    hover: To still package linux-rpm on darwin you need to run hover with the `--docker` flag.
    hover: Packaging linux-snap is not supported on darwin
    hover: To still package linux-snap on darwin you need to run hover with the `--docker` flag.
    hover: Packaging windows-msi is not supported on darwin
    hover: To still package windows-msi on darwin you need to run hover with the `--docker` flag.
    hover: 
    hover: Sharing flutter version
    Flutter 1.22.0 • channel unknown • unknown source
    Framework • revision d408d302e2 (3 months ago) • 2020-09-29 11:49:17 -0700
    Engine • revision 5babba6c4d
    Tools • Dart 2.10.0
    hover: Flutter engine commit: https://github.com/flutter/engine/commit/5babba6c4d25fa237bbf755ab85c9a0c50b3c6ec
    hover: ⚠ The go-flutter project tries to stay compatible with the beta channel of Flutter.
    hover: ⚠     It's advised to use the beta channel: `flutter channel beta`
    hover: Finding out the C compiler version
    Apple clang version 12.0.0 (clang-1200.0.32.2)
    Target: x86_64-apple-darwin20.1.0
    Thread model: posix
    InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
    hover: Sharing the content of go.mod
    module tomatoro/go
    
    go 1.13
    
    require (
            github.com/BestBurning/platform_device_id/go v0.1.1
            github.com/deckarep/gosx-notifier v0.0.0-20180201035817-e127226297fb // indirect
            github.com/go-flutter-desktop/go-flutter v0.42.0
            github.com/go-flutter-desktop/plugins/package_info v0.0.0-20200415181852-215d9c007301
            github.com/go-flutter-desktop/plugins/path_provider v0.3.3
            github.com/go-flutter-desktop/plugins/shared_preferences v0.4.3
            github.com/go-flutter-desktop/plugins/url_launcher v0.1.2
            github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1
            github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200707082815-5321531c36a2
            github.com/martinlindhe/notify v0.0.0-20181008203735-20632c9a275a
            github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect
            github.com/pkg/errors v0.9.1
            github.com/sidevesh/go-flutter-plugin-sqflite v0.0.0-20200718224941-b1ba30c6bdda
            gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2 // indirect
    )
    hover: Sharing the content of hover.yaml
    application-name: Tomatoro
    executable-name: ""
    package-name: ""
    license: UNLICENSED
    target: lib/main_desktop.dart
    branch: ""
    cache-path: ""
    opengl: ""
    engine-version: ""
    hover: Sharing the content of go/cmd
    go/cmd/desktop_local_notifications.go   go/cmd/main.go  go/cmd/options.go       go/cmd/transparent_title_bar_darwin.go  go/cmd/transparent_title_bar_unsupported.go
    
  • How can I use golang on Android or iOS?

    How can I use golang on Android or iOS?

    I want to write an application on all platforms, it's a perfect solution working with go-flutter on desktop platforms. But I wonder how can I write apps efficiently on Android or iOS, I had seen go mobile or go bind, it seems I need to write code on Java/Kotlin or Swift, which is called by Dart and pass to Go API. I think there must be some ways simpler to call Go API in flutter.

  • Bug: Cross-Compile corrupts other builds

    Bug: Cross-Compile corrupts other builds

    @jld3103

    When I build one platform, the other folders gets updated and corrupted. Not sure whats happening but on ubuntu platfrom.

    [ERROR:flutter/shell/platform/embedder/embedder.cc(629)] 
    Not running in AOT mode but could not resolve the kernel binary.
    [ERROR:flutter/shell/platform/embedder/embedder.cc(53)]
    Returning error 'kInvalidArguments' (2) from Flutter Embedder API call 
    to 'FlutterEngineRun'. 
    Origin: ../../flutter/shell/platform/embedder/embedder.cc:631
    go-flutter: engine.Run() returned result code 2 (invalid arguments)
    

    Let me know if you guys can reproduce this?

    Flutter version

    Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel master, v1.10.7-pre.70, on Linux, locale en_US.UTF-8)

    [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2) [✓] Chrome - develop for the web [✓] Linux toolchain - develop for Linux desktop [✓] Android Studio (version 3.5) [✓] Android Studio (version 3.4) [✓] VS Code (version 1.36.0) [✓] Connected device (3 available)

  • Unable to build anything (no .packages file)

    Unable to build anything (no .packages file)

    Hover doctor

    $ flutter doctor
    Flutter 3.6.0-0.1.pre • channel beta • https://github.com/flutter/flutter.git
    Framework • revision 75927305ff (3 tygodnie temu) • 2022-11-17 05:52:50 +0530
    Engine • revision b754eabc98
    Tools • Dart 2.19.0 (build 2.19.0-374.1.beta) • DevTools 2.19.0
    [...]
    

    Error output

    Using hover build [...] --XXX to build my application, I get the following error:

    hover: Generating kernel snapshot
    result 97ec1709-f58d-434b-b3b3-f41ff40bad12
    Error: Error when reading '.packages': No such file or directory
    Error: Error when reading '.packages': No such file or directory
    [...]
    

    How to reproduce?

    $ flutter create testapp
    $ cd testapp
    $ flutter run --device-id linux # confirm that the app runs
    $ hover init
    $ hover build linux # press y when asked
    

    Build will fail.

  • fix(deps): update module golang.org/x/text to v0.6.0

    fix(deps): update module golang.org/x/text to v0.6.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/text | require | minor | v0.3.7 -> v0.6.0 |


    Release Notes

    golang/text

    v0.6.0

    Compare Source

    v0.5.0

    Compare Source

    v0.4.0

    Compare Source

    v0.3.8

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • fix(deps): update github.com/go-gl/glfw/v3.3/glfw digest to 93cebf7

    fix(deps): update github.com/go-gl/glfw/v3.3/glfw digest to 93cebf7

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/go-gl/glfw/v3.3/glfw | require | digest | 55e207c -> 93cebf7 |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • Auto-Updating app like discord or telegram desktops

    Auto-Updating app like discord or telegram desktops

    Is your feature request related to a problem?

    I think it's feature...

    A clear and concise description of what the problem is. After I distribute the app to clients, of course, I would want to add some new features or fix some bugs. At that time, I have to send newly released versions of the app to clients in dmg or in exe file types. But it's really frustrating for me and my clients.

    Describe the feature you'd like

    So I want to add auto-updating whenever the app starts like discord or telegram desktop apps. How can I implement it? Does your app support such a feature? if not, could you please implement it? so that i can learn it and copy it to my own desktop apps ). I have been searching for a solution to this problem for months... That would be great if you can help me and people who are facing the same problems.

  • arm linux supper

    arm linux supper

    Is your feature request related to a problem?

    A clear and concise description of what the problem is. I have an issue when [...]

    Describe the feature you'd like

    A clear and concise description of what you want to happen.

    arm linux supper

An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Dec 3, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Dec 3, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functional build process. This repository is intended as a quick reference to help others start similar projects using the referenced libraries and will not be actively maintained.

Dec 3, 2022
An example desktop system tray application that can launch HTML5 windows. Go source with a build process for Windows, Mac and Linux.

ExampleTrayGUI An example cross-platform (Mac, Windows, Linux) system tray application that can launch HTML5 windows, developed in Go including functi

Dec 3, 2022
Zenity dialogs for Golang, Windows, macOS

Zenity dialogs for Golang, Windows and macOS This repo includes both a cross-platform Go package providing Zenity-like dialogs (simple dialogs that in

Dec 31, 2022
Go bindings for GLFW 3

GLFW 3.3 for Go Installation GLFW C library source is included and built automatically as part of the Go package. But you need to make sure you have d

Dec 27, 2022
Compute shader in GO (using go-gl/glfw)
Compute shader in GO (using go-gl/glfw)

shadr (compute shader using go-gl/glfw) structure main.go contains intialisation

Jan 20, 2022
W32find - Find parent windows and their children windows using win32api.

w32find Package w32find provides a set of interface to win32 APIs that can be used to find windows and their controls. Install go get -v github.com/mo

Jan 5, 2022
A Go (golang) Custom Flutter Engine Embedder for desktop
A Go (golang) Custom Flutter Engine Embedder for desktop

Go Flutter desktop embedder ⚠️ Warning: this project has been moved to its own organization. Please take a look at its new location: github.com/go-flu

Jul 23, 2022
Proof-of-concept Windows-like clipboard manager for Linux in Go

Goclip Simple Windows-like clipboard manager for linux. This application is just a proof-of-concept and might be highly unstable. Features Clipboard t

Jan 28, 2022
Slice and dice your TMUX windows and panes
Slice and dice your TMUX windows and panes

Chaakoo is a wrapper over TMUX that can create sessions, windows and panes from a grid based layout. The idea here is inspired by the CSS grid template areas.

Nov 1, 2022
Tiny cross-platform webview library for C/C++/Golang. Uses WebKit (Gtk/Cocoa) and Edge (Windows)

webview A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. Also, there are Rust bindings, Python bindings, Ni

Dec 28, 2022
Tiny cross-platform webview library for C/C++/Golang. Uses WebKit (Gtk/Cocoa) and Edge (Windows)

webview A tiny cross-platform webview library for C/C++/Golang to build modern cross-platform GUIs. Also, there are Rust bindings, Python bindings, Ni

Jan 1, 2023
Windows API and GUI in idiomatic Go.
Windows API and GUI in idiomatic Go.

Windigo Win32 API and GUI in idiomatic Go. Overview The UI library is divided in the following packages: Package Description ui High-level UI wrappers

Dec 27, 2022
A Windows GUI toolkit for the Go Programming Language
A Windows GUI toolkit for the Go Programming Language

About Walk Walk is a "Windows Application Library Kit" for the Go Programming Language. Its primarily useful for Desktop GUI development, but there is

Dec 30, 2022
Common library for Go GUI apps on Windows
Common library for Go GUI apps on Windows

winc Common library for Go GUI apps on Windows. It is for Windows OS only. This makes library smaller than some other UI libraries for Go.

Dec 12, 2022
Windows GUI framework for Go.

gform is an easy to use Windows GUI toolkit for Go It provides two approaches to create UI. 1. Pure code. gform.Init() mainWindow := gform.NewForm(ni

Jan 1, 2023
Windows GUI library for Go (Golang). Comes with a graphical UI designer.

Version 2 Please go to Version 2 of this library for the latest version. Windows GUI Library This is a pure Go library to create native Windows GUIs.

Jan 1, 2023
Golang bindings for XCGUI, Windows GUI library, DirectUI design idea.
Golang bindings for XCGUI, Windows GUI library, DirectUI design idea.

XCGUI 项目文档 帮助文档 程序示例 介绍 English | 简体中文 DirectUI设计思想: 在窗口内没有子窗口,界面元素都是逻辑上的区域(无HWND句柄,安全,灵活), 所有UI元素都是自主开发(不受系统限制), 更加灵活的实现各种程序界面,满足不同用户的需求.

Dec 22, 2022