Code前端首页关于Code前端联系我们

Flutter 开发桌面应用 - 将现有的 App 应用迁移到桌面版本

terry 2年前 (2023-09-23) 阅读数 86 #移动小程序

Flutter 制作了一个应用程序并发布了 Android 和 iOS 版本,计划支持所有平台。于是开始尝试 Flutter Desktop 解决方案。我们在Github上可以找到两种方案,一种是Flutter-Desktop-embedding的官方方案,另一种是用Go和glfw开发的go-Flutter

两种方案对比

选择使用Flutter-Desktop。 go-flutter,我们对两种方案进行一些介绍和比较。 Flutter 开发桌面应用——迁移已有App应用到桌面版

项目结构的两种方式:

Flutter 开发桌面应用——迁移已有App应用到桌面版

Flutter Desktop Embedding:

在Flutter Desktop中,我们可以看到目录结构与Flutter开发移动应用的结构类似。一个主工程项目下有每个平台的shell(也可以包括Android和iOS),然后shell工程集成了Flutter渲染引擎。 Flutter的代码写在lib目录下。

如果我们了解一些MacOS开发或者Windows开发,我们可以直接更改项目中的原生代码。例如,如果要改变整个程序的窗口样式,可以直接在原项目中进行更改。例如,如果要集成Apple的macOS IAP,可以直接在原生项目中实现。

它的缺点是你最好对三个平台的开发有所了解

Go Flutter:

Go Flutter 只有一个桌面目录,因为 Go 语言本身是跨平台的,这对于桌面版本来说。 。相比 Flutter Desktop,开发者不再需要担心 MacOS 或 Windows 开发。桌面全部是Go语言编写的内容。最后,桌面可以编译成第三平台的可执行文件。开发者只需要了解Go语言即可。

它的缺点是,如果你想在Win、Mac或Linux的不同平台上做一些特殊的功能或界面,会特别麻烦,不像Flutter Desktop可以直接在宿主项目中实现。

对比结果后如何选择 选择时,可以根据自己的技术栈和产品特点来选择。

如果你懂Go语言,而且你的程序是面向阅读或者面向业务的,基本不需要和Native本身交互,那么选择Go Flutter真的很酷。

如果你对MacOS或者Windows开发有一点了解,并且你的程序往往在三个桌面上都有自己的特点,需要改变整个窗口的一些样式,那么选择Flutter Desktop embedding。

Go Flutter的实际使用

上面说了这么多,我们来实际体验一下Go Flutter吧。先说一下背景。我使用Flutter开发了一个应用程序,现在我想将应用程序转换为可以在桌面上运行的版本。我写的软件叫Everything。它是一个录音软件。你可以在这里下载alles.app,先看看效果。

  1. 开始安装。由于Go flutter是用Go编写的,所以需要安装Go工具包。您可以从官网下载并安装
  2. 来安装Hover。 Hover是Go Flutter的命令行工具,可以简化项目初始化和操作。使用以下命令安装
    go get -u github.com/go-flutter-desktop/hover
    复制代码

    注意,如果以上命令卡住无法下载,可以设置代理。设置命令行代理可以打开ss或者v2ray,然后在命令行输入命令设置

    export http_proxy="http://127.0.0.1:8001"; export HTTP_PROXY="http://127.0.0.1:8001"; export https_proxy="http://127.0.0.1:8001"; export HTTPS_PROXY="http://127.0.0.1:8001"
    //8001改成你的ss或者v2ray监听的端口
    复制代码

    ⚠️注意:安装Hover后,官网说可以使用hover命令,但是可以在命令行上键入悬停时仍然找不到命令。这里我使用的是Mac系统。安装完成后,主目录下多了一个go目录。您需要将 go 包路径添加到环境变量中。

    export PATH=$PATH:/usr/local/go/bin
    export PATH=$PATH:/Users/{你的用户名}/go/bin
    //可以检查一下你的home目录是否有了go的目录,里面有个bin,将那个目录加入到环境变量即可
    复制代码
  3. 进入之前开发应用的Flutter项目,运行命令初始化项目
    hover init github.com/my-organization/simpleApplication
    //后面这个github.com xxxx就是你的项目仓库地址。没有的话随便写也行
    复制代码

    初始化项目后,你会发现你的项目中多了一个与之前iOS项目同级的桌面目录,安卓。该桌面目录是该项目的桌面版本。

  4. 复制 main.dart 并将其重命名为 main_desktop.dart。 Go flutter 有一个特别的地方,就是程序的入口不是 main.dart,而是 main_desktop.dart。更改main_desktop.dart以使用桌面版本运行
    void main() {
      // 关键是下面这一句
      debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
      runApp(new MyApp());
    }
    复制代码
  5. 大功告成,让我们运行项目吧。
    hover run
    //执行 hover run 可以运行项目
    复制代码

先看一下运行效果。以下是app的运行效果和桌面版的运行效果。

移动版本身的效果:Flutter 开发桌面应用——迁移已有App应用到桌面版

桌面版运行Go Flutter的效果:Flutter 开发桌面应用——迁移已有App应用到桌面版

FAQ:

1。如上迁移完成后程序还能运行吗?

当然不是。我们都知道我们使用了很多插件,但它们只支持Android或iOS。如果您使用大量此类插件,迁移到桌面可能会更加困难。我的整个迁移只花了大约 2-3 个小时。我使用 sqflite 和通用偏好。这两个插件已经在Go flutter中实现了,很容易替换。

2。如何使用Go Flutter插件

我们知道,我们所有与原生通信的通信都是通过方法通道来定义的。如果您使用的插件仅支持Android或iOS,那么您必须在桌面上实现插件方法通道的所有方法。目前,Go flutter 只有三个插件可用,可以在这里找到。 github.com/go-flutter-...点击某个插件就可以看到如何使用。只需将相应的代码粘贴到桌面上的选项文件中即可。别看错地方了。官方网站并没有说得很清楚。

作者:炸鸡大叔
链接:https://juejin.im/post/5cfd1ad86fb9a07ebf4b625b
来源:掘金
版权归作者所有。如需商业转载,请联系求作者授权。非商业转载请来源。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门