谷歌发布Flutter Alpha:支持Windows

老孟导读:Windows来了,Mac、Linux、Web还远吗?html

本文翻译自https://medium.com/flutter/announcing-flutter-windows-alpha-33982cd0f433android

咱们的使命是为开发人员提供一个开源,高生产率的框架,以便在任何平台上构建漂亮的本机应用程序。到目前为止,咱们已经为Android和iOS提供了正式版本(stable releases),仅Google Play商店就提供了8个稳定版本和100,000多个应用。咱们将继续扩大关注范围,包括Web,macOS和Linux等其余平台。今天,咱们很高兴地宣布Flutter的另外一个目标,即Flutter对Windows的Alpha版本的支持。git

Windows仍然是台式机和笔记本电脑设备的流行选择,Microsoft报告了超过十亿台运行Windows 10的活动设备。咱们本身的统计数据显示,全部Flutter开发人员中有超过一半使用Windows,所以,它天然Flutter是的目标。本地桌面支持为Flutter开辟了许多激动人心的可能性,包括改进的开发人员工具,减小了新用户的负担,固然,应用程序能够经过单个代码库访问用户可能拥有的任何设备。github

将Windows添加到Flutter

如咱们的架构概述中所述Flutter是一种跨平台的UI工具包,旨在容许在iOS和Android等操做系统之间重复使用代码,同时还容许应用程序直接与基础平台服务交互。目的是使开发人员可以交付在不一样平台上感受天然的高性能应用程序,在存在尽量多的代码的同时,拥抱它们存在的差别。Flutter的核心是引擎,它支持全部Flutter应用程序所必需的。每当须要绘制新框架时,引擎负责对合成场景进行栅格化。它提供Flutter核心API的低级实现,包括图形,文本布局,文件和网络I / O,可访问性支持,插件体系结构以及Dart运行时和编译工具链。shell

咱们添加到Flutter的每一个新平台都会经过新服务扩展核心框架,使其可以在该平台上发光。咱们从使用Material Design以及基于触摸的,以移动设备为中心的用户界面开始在Android和iOS上开始,该界面旨在在两个移动平台上都达到像素完美。经过Web,Windows,macOS和Linux添加对台式机外形的支持,带来了一整套全新的服务,其中包括对输入侧的键盘,鼠标,鼠标滚轮和控制器的强大支持,以及在这些方面适应甚至工做得最好的小部件。 Web和桌面应用程序随附的更大的屏幕尺寸。windows

此外,每一个新平台不只会影响Flutter框架和引擎,还会影响不少其余方面:api

  • 工具链更新:向CLI和IDE工具添加新目标(在本例中为Windows)
  • Shell:支持经过WM_*消息处理Windows的输入和经过ANGLE的输出,使用斯基亚(Skia)以本机速度渲染到底层DirectX表面
  • Runner:每一个项目都会得到针对受支持目标的Shell应用程序。对于Windows,这是一个Win32 / C ++程序,可加载Flutter代码并在运行时执行它。若是须要,能够在此处向应用程序添加本机代码。
  • 插件:插件是Dart代码和该插件支持的每一个平台的本机代码的混合。须要为在Windows上Flutter应用程序中编译的每一个插件添加该本地代码。

此Alpha版本提供了坚实的基础,咱们将在将来几个月中稳定该基础。借助对Windows 7及更高版本的支持,咱们但愿这能够为喜欢冒险的开发人员提供一些入门知识。浏览器

探索一些示例应用

要查看Flutter对Windows的支持,您可能想尝试一些咱们建立的示例应用程序,这些应用程序在Windows上使用咱们新增的支持能够很好地运行。第一个是Flokk应用程序,它是与gskinner.com的设计师和开发人员共同建立的。目的是经过建立创新的,精美的Flutter桌面应用程序来证实Flutter已准备好用于桌面。Flokk是一款可与您的真实Google Contacts数据配合使用并在GitHub和Twitter上显示联系人活动的应用程序。微信

图片发布

若是您想在Windows机器上使用Flokk应用程序,则能够在GitHub上下载最新版本。若是您想了解gskinner如何构建此应用程序,请参阅其出色的博客文章:Flokk-咱们如何使用Flutter构建桌面应用程序网络

此外,Flutter Gallery应用程序(咱们用于Flutter的全部事物的展现应用程序)最近已彻底重写,以增长对台式机尺寸的支持。这使咱们可以检查它是否能够在Web以及Windows,macOS和Linux上正常运行。

图片发布

库中的许多研究都展现了在使用Flutter设计本身的Windows应用程序时建议使用的不一样应用程序风格的想法。当您找到本身喜欢的东西时,该代码可在GitHub上找到

Flutter for Windows入门

根据Windows安装说明开始安装Flutter SDK 。要定位Windows桌面,首先须要安装Desktop docs中描述的工具。默认状况下,Flutter假定您正在构建生产软件,而且未配置为开发Windows应用程序。可是,能够从命令行轻松解决:

$ flutter channel dev
$ flutter upgrade
$ flutter config --enable-windows-desktop

第一条命令将Flutter设置为使用实验质量的“ dev”通道(而不是默认的“ stable”通道)。这样,您就可使用仍在Alpha中的平台支持,例如Windows。第二条命令下拉该通道上的最新位。第三个命令可在您的PC上进行Windows应用开发。

设置好以后,每次使用Android StudioVisual Studio Code的扩展支持,或者从命令行建立新的Flutter应用程序时,它都会建立一个Windows子文件夹。

图片发布

若是您感到好奇,请在Windows上运行默认应用程序,以下所示:

图片发布

最后,一旦建立了应用程序,构建该应用程序将建立一个发布模式的本机EXE文件以及必要的支持DLL。到那时,若是您想尝试在任何Windows 10计算机上运行新的Windows应用程序,即便没有安装Flutter的计算机,也能够按照如下步骤压缩必要的文件并运行。

Windows插件

即便咱们刚刚发布Alpha版,Flutter社区也已经在为Windows插件进行开发。这里有一些:

使用这些插件的好处是它们中的大多数还支持其余Flutter平台,这使您能够将应用定位到Android,iOS,Web等以及Windows。此外,虽然pub.dev(Dart和Flutter的软件包管理器)上约有三分之一的可用软件包是具备特定于平台的代码的插件,但大多数不是。例如,许多最高质量和最经常使用的软件包是Flutter Favorite程序的一部分,而且大多数都在Windows上运行。若是要查看在Windows上运行的软件包的完整列表,能够在pub.dev上运行此查询

与Windows互操做

若是您想为Windows构建本身的插件,则能够。进入开发人员通道并为计算机启用Windows后,可使用如下命令开始:

$ flutter create --template plugin --platforms Windows hello_plugin

届时,您将可以在插件项目中将Flutter代码添加到lib子文件夹中,并将Windows代码添加到windows子文件夹中。您将使用Platform Channels在两个堆栈之间进行通讯,这其实是Dart和C ++代码之间传递的消息。有关此示例的精心制做,请参见url_launcher实现

可是,平台通道并非与Windows互操做的惟一选择。若是愿意,可使用Dart FFI(外部功能接口)加载库并调用C样式的API,例如Win32 API。与使用平台通道的url_launcher不一样,path_provider插件是使用FFI实现的,如您在GitHub repo中所见。FFI无需在Dart和C ++之间来回切换,而是容许您编写代码以直接导入所需的API。例如,如下是用于调用MessageBox API的代码:

typedef MessageBoxNative = Int32 Function(
  IntPtr hWnd, 
  Pointer<Utf16> lpText, 
  Pointer<Utf16> lpCaption,
  Int32 uType
);

typedef MessageBoxDart = int Function(
  int hWnd, 
  Pointer<Utf16> lpText, 
  Pointer<Utf16> lpCaption, 
  int uType
);

final user32 = DynamicLibrary.open('user32.dll');

final win32MessageBox =
  user32.lookupFunction<MessageBoxNative, MessageBoxDart>('MessageBoxW');

void showMessageBox(String message, String caption) =>
  win32MessageBox(
    0, // No owner window
    Utf16.toUtf16(message), // Message
    Utf16.toUtf16(caption), // Window title
    0 // OK button only
  );

...

// call just like any other Dart function
showMessageBox('Test Message', 'Window Caption');
view rawmbox.dart hosted with ❤ by GitHub

此代码不会产生在平台通道之类的两个线程之间进行转换的开销。FFI包括对许多不一样种类的API的支持,包括Win32,WinRT和COM。可是,在运行并包装整个基于C的Windows API以前,请检查win32插件,该插件已经能够很好地作到这一点。实际上,path_provider插件自己是使用win32插件实现的。有关win32插件如何开发以及如何工做的详细信息,请查看博客文章Dart FFI的Windows乐趣

Windows资源Flutter

不管您在Flutter for Windows之旅中的任何地方,都应确保阅读flutter.dev上的桌面文档,其中包括最新详细信息。另外,您将须要熟悉 Flutter代码实验室,以编写Windows,macOS和Windows桌面目标应用程序,其中包括用于真实场景的代码,例如使用OAuth进行身份验证,访问GitHub API和使用GraphQL。或者,对于在Windows上运行的Flutter桌面代码的另外一个很好的例子,请查看照片搜索示例

图片发布

它使用标准的Windows文件打开对话框,树视图小部件,拆分器小部件,并将结果与真实世界的REST API集成在一块儿。

对于其余有用的面向桌面的小部件,咱们建议使用菜单栏插件NavigationRail小部件DataTable小部件。您可能还对InteractiveViewer小部件感兴趣,该小部件具备完整的桌面支持,可经过鼠标手势来平移和缩放子小部件。

能够探索的另外一组有用的小部件是SyncFusion中的那些,它们已经在Windows开发社区中广为人知。它们提供了普遍的企业质量小部件,用于建立图表,仪表,数据网格等。

图片发布

图片发布

这些小部件具备社区和企业许可证,所以您能够找到最适合您的项目的工具。

适用于Windows的Flutter

除了Windows(一般是Flutter桌面)的软件包和插件外,Flutter开发人员还一直在开发针对Windows的出色应用,例如Invoice Ninja的实验性构建:

图片发布

Invoice Ninja是一家依靠Flutter带来收入的发票公司。他们的目标是今天生产中的Android和iOS,并具备基于Web的演示供您尝试,但也期待提供桌面版本。

“在过去的Ninja中,咱们一直在努力仅支持Web和移动设备,一次只能维护三个单独的代码库。借助Flutter,以及最近的Flutter Desktop,咱们已经可以使用单个代码库为每一个主要平台构建应用程序。咱们不只能够从根本上得到应用程序的免费桌面版本,并且还拥有全部应用程序中最好的性能!”

—Invoice Ninja 联合创始人Hillel Coren

若是您对实现可在移动和台式机上运行的现实世界中可产生收入的Flutter应用感兴趣,则可在GitHub上找到源代码

Aartos是另外一家制造出色产品的公司,其中包括带有Flutter编写的具备多平台客户端的实时无人机检测系统。这是在移动客户端旁边运行的Windows客户端的早期版本:

视频地址:https://youtu.be/mGvPCT7Vc2Y

这两个针对iOS和Windows的版本共享彻底相同的代码库。

若是您是经验丰富的Flutter开发人员,而且发现本身在Flutter的不一样版本之间进行切换;例如,一个版本用于交付生产型移动应用程序,另外一个版本用于测试Windows alpha,那么您可能会喜欢Flutter版本管理器,该版本管理器如今带有Windows GUI,您能够下载该版本

视频地址:https://youtu.be/_WA71wSt2ww

该工具是开源的,所以您能够亲自了解Leo如何使其看起来如此出色。

下一步是什么

如今,咱们已经发布了Alpha版,咱们的注意力转移到完成功能集和稳定产品的发布上。做为一个开源项目,您能够在GitHub网站上关注咱们的beta测试进展,尚需完成的其余工做包括可访问性,全球化和本地化,加强的键盘和文本处理,对命令行参数的支持等等。

除了支持经典的Win32 API外,咱们还在试验基于UWP的Flutter shell版本,该版本使Flutter能够访问更普遍的基于Windows的设备,包括Xbox。做为该实验的一部分,本周咱们向Windows应用商店发布了基于UWP的Flutter Gallery版本。

如下屏幕快照显示了在Xbox上运行的基于UWP的Flutter Gallery:

图片发布

这是在Windows 10X模拟器上运行的双屏Windows设备上运行的同一应用程序

图片发布

图片发布

您能够在GitHub上了解有关Flutter for UWP的进度的更多信息

摘要

在此版本中,咱们将Flutter的功能引入Windows,它具备声明式,可组合的,反应式的框架,可提升开发人员的工做效率,并具备适应性的Material规范实现,所以您还可使应用外观和感受达到您但愿的方式做为Flutter的全套开发和调试工具。完成后,您的应用程序将编译为本机64位代码,您能够将其打包并带到其余Windows计算机上,就像其余任何本机应用程序同样。最后,您可使用相同的代码库来建立针对Android,iOS,Web,macOS和Linux的应用程序。

若是您想开始使用Flutter构建Windows应用程序,咱们但愿收到您的反馈!若是您但愿利用Windows的专业知识来构建流行插件的Windows实现,或者为Flutter构建一些以Windows为中心的工具(也许是一个CLI,它能够从flutter build windows命令的输出中建立MSIX ……),那也欢迎您!

有了Flutter对Windows的新支持,您将要构建什么?

版权声明:本文为 原创,依据 CC BY-SA 4.0 许可证进行受权,转载请附上出处连接及本声明。

`

交流

交流

老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com

欢迎加入Flutter交流群(微信:laomengit)、关注公众号【老孟Flutter】: