当前位置: 首页 > news >正文

学起来:Flutter将支持桌面应用开发

英文原文

Flutter团队正在扩展Flutter,支持创建macOS、Windows和Linux应用程序。从长远来看,这项工作将提供一个完全继承的解决方案,flutter create,flutter run 和 flutter build 在桌面平台开发上的表现将和现在的移动平台开发中一样,但是目前这项工作还在进行中。

当前的状况

下面提供了平台状况的高级概述。

详细信息请参阅 源码仓库

重要提示:Flutter桌面API仍处于早期阶段,如有更改,恕不另行通知。不会提供API或ABI的向后兼容性。Flutter更新之后,所有使用了Flutter的项目的代码都需要做更新并且重新编译。

macOS系统

这是最成熟的桌面平台(出于一些原因,它非常接近于我们已经支持的iOS)。

桌面版中以Flutter开头的类与iOS通用,所以应该基本稳定。以FLE开头的类仍处于早期阶段。

Windows系统

当前的 Windows shell 只是 GLFW 占位符, 以便与前期实验. 未来它将被 Win32 或者 UWP shell 替代,因为Win32 或者 UWP shell 允许在Flutter应用程序中嵌入view-level。

预计,最终版本的shell APIs和当前实现的方式完全不同。

Linux

和Windows一样,当前 Linux shell 只是 GLFW 占位符。我们想创建一个库,让开发可以任何部分嵌入Flutter,无论你使用GTK+, Qt, wxWidgets, Motif, 还是其他任意工具包。但是我们还没有确定一个好方法。

插件

所有平台都支持编写插件(例如 flutter-desktop-embedding 这些插件),但是,目前依然很少有插件实际上具有桌面支持。

工具

Flutter支持桌面的工具开发还在进行中。要使用任何桌面支持工具(例如用flutter devices列出主机)目前必须满足两点:

  1. 你不能使用稳定的Flutter channel。因为桌面支持还没有被认为是稳定的和适合生产环境的
  2. 你必须设置ENABLE_FLUTTER_DESKTOP环境变量为true。这是为了避免在指定长期解决方案时影响现有的移动开发工作流程(参见:#30724。

预构建Shell库

默认情况下,桌面库未下载,可以通过运行运行flutter precache下载,根据你的你的操作系统带上参数 --linux,--macos或 --windows。

C++ Wrapper

Windows和Linux库提供C语言API。为了更容易使用他们,可以使用C++包装器,将其构建到应用程序,中以便与提供更高级的API调用。上面提到的flutter precache命令会将这个包装器的源码下载到与该库同目录下的cpp_client_wrapper文件夹中。

使用Shells

由于目前没有桌面shell工具的支持,你需要自己写一个应用的运行工具,并且在库里链接,就像任何你使用的插件那样。这将需要做一些你熟悉所使用的桌面系统的原生开发。如果你在桌面系统系统开发方面没有经验,你需要等到flutter桌面开发工具支持可用。

所以,使用Shells请参阅你所使用的操作系统的库的头。将来会补充更多的文档。至于现在,可以参考flutter-desktop-embedding示例,也许会有启发。

另外,你的Flutter桌面应用程序还需要bundle Flutter assets(由flutter build bundle创建)。在Windows和Linux你将还会需要Flutter引擎的ICU数据。(在你的Flutter目录中下的bin/cache/artifacts/engine查找icudtl.dat

macOS 注意

目前你必须在XIB中设置FLEView,而不是在代码中设置(以后会改)。如下:

  • 拖入一个OpenGL视图
  • 修改类型为FLEView.
  • 选中Double Buffer选项. 如果你的视图没有被绘制出来,可能是因为忘记这个步骤.
  • 选中Hi-Res Backing支持选项. 如果在高DPI显示器上只显示部分程序,那么可能是因为忘记这个步骤。

欢迎关注公众号,和大家一起学习编程吧

相关文章:

  • 基于binlog方式搭建MySQL主从
  • C# 虹软SDK视频人脸识别和注册
  • redis-主从复制
  • 再见 异步回调, 再见 Async Await, 10 万 个 协程 的 时代 来 了
  • 007《loom》 Chrome翻录网页视频神器
  • 03python面向对象编程1
  • 前端知识杂锦(二)
  • 大传媒时代报业如何驾驭新媒体
  • ELK日志收集(一)-Elasticsearch安装
  • gulp+es6 配置
  • 因为看见,所以发现:QBotVariant谢绝落幕
  • (转)重识new
  • ubuntu 安装微信
  • Vue基础起步
  • 如何动态获取Dubbo服务提供方地址列表
  • [LeetCode] Wiggle Sort
  • [译] React v16.8: 含有Hooks的版本
  • [译]如何构建服务器端web组件,为何要构建?
  • 【Linux系统编程】快速查找errno错误码信息
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 10个最佳ES6特性 ES7与ES8的特性
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • MQ框架的比较
  • Python打包系统简单入门
  • win10下安装mysql5.7
  • 编写符合Python风格的对象
  • 初识 beanstalkd
  • 服务器从安装到部署全过程(二)
  • 将回调地狱按在地上摩擦的Promise
  • 力扣(LeetCode)21
  • 试着探索高并发下的系统架构面貌
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 【干货分享】dos命令大全
  • 关于Android全面屏虚拟导航栏的适配总结
  • 移动端高清、多屏适配方案
  • #14vue3生成表单并跳转到外部地址的方式
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (AngularJS)Angular 控制器之间通信初探
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (备忘)Java Map 遍历
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (全注解开发)学习Spring-MVC的第三天
  • (五)c52学习之旅-静态数码管
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • .bat文件调用java类的main方法
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net访问oracle数据库性能问题