窗口Alpha的颤动

2020-09-24 03:24:23

我们的使命是为开发人员提供一个开源、高效的框架,用于在任何平台上构建漂亮的原生应用程序。到目前为止,我们已经为Android和iOS提供了生产质量的支持,仅在Google Play Store上就发布了8个稳定版本和超过10万个应用程序。我们继续拓宽我们的关注点,以包括其他平台,包括Web、MacOS和Linux。今天,我们很高兴地宣布一个额外的颤动目标:Windows的颤动支持的阿尔法版本。

Windows仍然是台式机和笔记本电脑的热门选择,微软报告称,运行Windows10的活跃设备超过10亿台。我们自己的统计数据显示,超过一半的Ffltter开发者使用Windows,所以它是Ffltter的天然目标。原生桌面支持为Ffltter打开了各种令人兴奋的可能性,包括改进的开发人员工具,减少了新用户的摩擦,当然还有可以从单个代码库访问用户可能拥有的任何设备的应用程序。

正如我们在架构概述中所描述的,Ffltter是一个跨平台的UI工具包,旨在允许跨操作系统(如iOS和Android)重用代码,同时还允许应用程序直接与底层平台服务交互。其目标是使开发人员能够交付在不同平台上感觉自然的高性能应用程序,拥抱存在的差异,同时尽可能多地共享代码。颤动的核心是引擎,它支持支持所有颤动应用程序所需的基本体。每当需要绘制新帧时,引擎都负责栅格化合成场景。它提供Ffltter核心API的底层实现,包括图形、文本布局、文件和网络I/O、可访问性支持、插件体系结构以及DART运行时和编译工具链。

我们为Ffltter添加的每一个新平台都会用新服务扩展核心框架,使其在该平台上大放异彩。我们首先在Android和iOS上进行了Material Design,以及一个基于触摸的、以移动为中心的用户界面,该界面被设计成在这两个移动平台上都是像素完美的。通过Web、Windows、MacOS和Linux增加对桌面外形规格的支持,带来了一系列全新的服务,包括对输入端的键盘、鼠标、鼠标滚轮和控制器的强大支持,以及在Web和桌面应用程序附带的较大屏幕尺寸下适配甚至工作得最好的小工具。

此外,每一个新平台不仅会影响颤振框架和引擎,还会影响很多其他事情:

工具链更新:将新目标添加到CLI和IDE工具(在本例中为Windows)。

Shell:支持通过WM_*消息处理来自Windows的输入,通过ANGE处理输出,后者使用Skia以原生速度呈现到底层DirectX表面。

Runner:每个项目都会为支持的目标获取一个shell应用程序。对于Windows,它是一个Win32/C++程序,用于加载颤振代码并在运行时执行它。如果您需要的话,这是向您的应用程序添加本机代码的好地方。

插件:插件是用于插件支持的每个平台的DART代码和本机代码的混合。需要为编译到Windows上的Ffltter应用程序中的每个插件添加该原生代码。

这个alpha版本提供了一个坚实的基础,我们将在接下来的几个月里稳定下来。有了对Windows7和更高版本的支持,我们希望这能给敢于冒险的开发人员一些入门的东西。

要查看对Windows的颤动支持的实际效果,您可能想要试用我们创建的一些样例应用程序,这些应用程序在Windows上运行良好,并提供了我们新添加的支持。第一个是Flokk应用程序,它是与gskinner.com的设计师和开发者合作创建的。我们的目标是通过创建一个创新的、漂亮的Ffltter桌面应用程序来证明Ffltter已经为桌面做好了准备。Flokk是一款应用程序,可以处理你真实的谷歌联系人数据,还可以显示你的联系人在GitHub和Twitter上的活动。

如果你想在你的Windows机器上使用Flokk应用程序,你可以在GitHub上下载最新版本。如果你想了解gskinner是如何构建这款应用的,请参阅他们优秀的博客文章:Flokk--我们如何使用Ffltter构建桌面应用。

此外,Ffltter Gallery应用程序,也就是我们针对所有事物进行展示的Ffltter应用程序,最近被完全重写,增加了对桌面外形尺寸的支持。这让我们可以检查它在Web以及Windows、MacOS和Linux上是否运行良好。

图库中的许多研究展示了不同应用程序风格的想法,我们在设计您自己的带有Ffltter的Windows应用程序时推荐使用这些风格的应用程序。当您找到您喜欢的内容时,可以在GitHub上找到代码。

根据Windows安装说明安装颤振SDK开始。要瞄准Windows桌面,您首先需要安装桌面文档中描述的工具。默认情况下,Ffltter假定您正在构建生产软件,并且没有配置为开发Windows应用程序。不过,这很容易从命令行修复:

第一个命令将颤振设置为使用实验质量的“dev”通道(而不是默认的“稳定”通道)。这允许您使用仍处于Alpha级别的平台支持,如Windows。第二个命令拉下该通道上的最新比特。第三个命令启用PC上的Windows应用程序开发。

设置好后,每次创建新的颤动应用程序时,使用Android Studio或Visual Studio代码的扩展支持,或者从命令行,它都会创建一个Windows子文件夹。

如果你很好奇,在Windows上运行默认应用程序如下所示:

最后,一旦您创建了您的应用程序,构建它就会创建一个发布模式的原生EXE文件以及必要的支持DLL。在这一点上,如果你想尝试在任何Windows10机器上运行你的新Windows应用程序,即使是那些没有安装Ffltter的机器,你也可以按照这些步骤压缩必要的文件并开始运行。

尽管我们刚刚发布了alpha版本,Ffltter社区已经在为Windows开发插件了。以下是几个例子:

PATH_PROVIDER:查找用户机器上特殊方向的路径,如Documents或Temp。

使用这些插件的好处是,它们中的大多数还支持其他Ffltter平台,这使得你可以将你的应用程序定位在Android、iOS、Web等平台以及Windows上。此外,虽然pub.dev(Dart和Ffltter的包管理器)上大约三分之一的可用包是带有平台特定代码的插件,但大多数不是。例如,许多最高质量和最常用的软件包都是颤动最受欢迎的程序的一部分,其中大多数都可以在Windows上运行。如果您想查看在Windows上运行的软件包的完整列表,可以在pub.dev上运行以下查询。

如果你想为Windows构建你自己的插件,你可以。一旦您进入dev频道并为您的计算机启用了Windows,您就可以使用以下命令开始:

此时,您将能够将颤动代码添加到插件项目的lib子文件夹中,将Windows代码添加到windows子文件夹中。您将使用平台通道在两个堆栈之间通信,这实质上是DART和C++代码之间的消息传递。有关这方面的一个精心设计的示例,请参阅url_Launcher实现。

但是,平台通道并不是与Windows进行互操作的唯一选择。如果您愿意,可以使用DART FFI(外部函数接口)加载库并调用C风格的API,如Win32API。与使用平台通道的url_Launcher不同,path_Provider插件是使用FFI实现的,正如您在GitHub资源库中看到的那样。FFI允许您编写代码直接导入所需的API,而不是在DART和C++之间来回切换。例如,下面是调用MessageBox API的代码:

这段代码不会产生像平台通道那样在两个线程之间转换的开销。FFI包括对许多不同类型的API的支持,包括Win32、WinRT和COM。但是在您结束并包装整个基于C的Windows API之前,请先看看Win32插件,它已经在做这件事了。事实上,PATH_PROVIDER插件本身就是使用Win32插件实现的。有关Win32插件是如何开发的以及它是如何工作的详细信息,请查看博客文章“Windows Fun with Dart FFI”。

无论您在Ffltter for Windows之旅中走到哪里,都应该阅读fltter.dev上的桌面文档,其中包括最新的详细信息。此外,您还需要了解编写Windows、MacOS和Windows桌面目标应用程序的Ffltter代码库,其中包括用于真实场景的代码,如使用OAuth进行身份验证、访问GitHub API和使用GraphQL。或者,要获得在Windows上工作的Ffltter桌面代码的另一个很好的示例,请查看照片搜索示例。

它使用标准的Windows File Open对话框、树视图小部件和拆分器小部件,并将结果与真实的REST API集成。

对于其他有用的面向桌面的小部件,我们推荐菜单栏插件、NavigationRail小部件和DataTable小部件。您可能还会对InteractiveViewer小部件感兴趣,它完全支持桌面上的鼠标手势来平移和缩放子小部件。

另一组需要探索的有用小部件是来自SyncFusion的小部件,它们在Windows开发社区中已经很有名气了。它们提供了广泛的企业级小部件,用于创建图表、仪表、数据网格等。

这些小部件具有社区和企业许可证,因此您可以找到适合您的项目的小部件。

除了适用于Windows的软件包和插件(以及一般的Ffltter桌面),Ffltter开发人员还一直在开发针对Windows的优秀应用程序,比如这款来自Invoice Ninja的实验性应用程序:

发票忍者是一家依靠扑翼带来收入的发票公司。他们今天的目标是生产Android和iOS,并有一个基于网络的演示供你试用,但他们也在期待提供桌面版本。

“在发票忍者,我们过去一直在努力只支持网络和移动,一度维护着三个独立的代码库。有了Ffltter,以及最近的Ffltter Desktop,我们已经能够用一个代码库为每个主要平台构建应用程序。我们不仅基本上得到了免费桌面版的应用程序,而且它的性能也是所有应用程序中最好的!“。

如果你对实现一个能在移动和桌面机型上工作的创收的真实世界的颤动应用感兴趣,可以在GitHub上找到源代码。

Aartos是另一家正在建设伟大的东西的公司,包括一个带有用颤动编写的多平台客户端的实时无人机检测系统。下面是在移动客户端旁边运行的Windows客户端的早期版本:

如果您是一名经验丰富的颤动开发人员,并且发现自己在不同版本的颤动之间切换;例如,一个版本用于发布您的生产移动应用程序,另一个版本用于试验Windows Alpha,那么您可能会喜欢颤动版本管理器,它现在附带了一个可供您下载的Windows GUI。

这个工具是开源的,所以你可以自己看看Leo是如何让它看起来这么棒的。

现在我们已经发布了alpha,现在我们的注意力转移到完成功能集和稳定产品以供发布上。作为一个开源项目,您可以在我们的GitHub站点上跟随我们的进度进入测试版,剩下的工作需要完成,包括可访问性、全球化和本地化、增强的键盘和文本处理、对命令行参数的支持等等。

除了支持经典的Win32API之外,我们还在试验基于UWP的颤动外壳版本,它允许颤动到达更广泛的基于Windows的设备,包括Xbox。作为实验的一部分,本周我们向Windows商店发布了一个基于UWP的颤动画廊版本。

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

在此版本中,我们为Windows带来了Ffltter的强大功能,它的声明式的、可组合的、反应式的框架可提高开发人员的工作效率,它可自适应地实现材料规范,因此您可以使您的应用程序以您想要的方式进行外观和感觉,以及全套Ffltter开发和调试工具。完成后,您的应用程序将编译为本机64位代码,您可以像任何其他本机应用程序一样打包这些代码并将其带到其他Windows计算机上。最后,您可以使用相同的代码库来创建面向Android、iOS、Web、MacOS和Linux的应用程序。

如果您想开始使用Ffltter构建Windows应用程序,我们希望得到您的反馈!如果您更喜欢使用您的windows专业知识来构建流行插件的windows实现,或者构建一些以windows为中心的颤动工具(可能是从颤动构建窗口命令…的输出创建MSIX的命令行界面)。,那也是受欢迎的!