windows 仍在设置此设备的类配置。 (代码 56)_谷歌发布Flutter Alpha:支持Windows

c47e1f4b227ab6bbbf6aa82143aa7491.png

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

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

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

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

将Windows添加到Flutter

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

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

此外,每个新平台不仅会影响Flutter框架和引擎,还会影响很多其他方面:

  • 工具链更新:向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上显示联系人活动的应用程序。

df952e72d434034a6634bb00d39b8b6a.png

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

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

f13aa4b1eddece668dc457c00138b966.png

库中的许多研究都展示了在使用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 Studio或Visual Studio Code的扩展支持,或者从命令行创建新的Flutter应用程序时,它都会创建一个Windows子文件夹。

6283cfcfb0517339abf227d49bc9c9e8.png

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

e1ba3f1493cfbcc0192703c2c124d03b.png

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

Windows插件

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

  • url_launcher:从您的应用程序在浏览器中启动URL
  • path_provider:在用户的机器上找到指向特殊方向的路径,例如Document或temp
  • shared_preferences:保持用户首选项在应用程序会话之间的磁盘上序列化
  • biometric_storage:通过生物识别技术加密的存储
  • flutter_audio_desktop:从桌面应用播放音频

使用这些插件的好处是它们中的大多数还支持其他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 windowUtf16.toUtf16(message), // MessageUtf16.toUtf16(caption), // Window title0 // 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桌面代码的另一个很好的例子,请查看照片搜索示例。

cd2499504007f364c2c84b351f0436bd.png

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

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

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

undefined_b.jpg

ff0d90343032c873f322929a279c0665.png

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

适用于Windows的Flutter

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

3d3d72529e7492b54c1a3f6c4742d144.png

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:

d6b5cfee7cfe0ddacd75651ef54bdcb4.png

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

undefined_b.jpg

794551227d4c9f841b00b5aa9da385ac.png

您可以在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】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word List39

word List39 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

不同路径 II-dp

题目背景 一个机器人位于一个 n x m 网格的左上角 机器人每次只能向下或者向右移动一步。它试图达到网格的右下角 题目描述 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径&#xff1f; 网格中的障碍物和空位置分别用 1 和 0 来表示。 输入格式 第一行两…

.NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(下)

05 | 依赖注入&#xff1a;良好架构的起点注册完毕之后&#xff0c;想替换某些组件的某些部分时&#xff0c;可以使用 Replace 和 RemoveAllservices.AddSingleton<IOrderService>(new OrderService()); services.Replace(ServiceDescriptor.Singleton<IOrderService,…

python正态分布函数_python3-正态分布

loc 平均值 scale (scale) 标准差 pdf(x, loc0, scale1) 正态分布&#xff08;Normal distribution&#xff09;&#xff0c;也称“常态分布”&#xff0c;又名高斯分布&#xff08;Gaussian distribution&#xff09;&#xff0c;最早由A.棣莫弗在求二项分布的渐近公式中得到。…

word List40

word List40 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

int 范围_Java学习之随机生成5个(范围1——33)不同数字的思考

昨天做了一道福彩双色球的简单程序题&#xff0c;一开始不懂双色球的玩法&#xff0c;楼主我从来不买彩票的&#xff0c;( ╯□╰ )。所以随机生成某个范围的5个数字&#xff08;数字可以重复&#xff09;&#xff0c;那么很简单&#xff0c;一个循环就可以搞定了&#xff0c;但…

高级数据结构---优先队列

高级数据结构—优先队列 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include <stdio.h> #include <stdlib.h> int r[] { -1,1,4,590,4,2,8,7,5,89,67,5,2,1,67,86,54 };//存储要排序的数,第一个元素不存储元素赋值为-1 int length sizeof(r) / size…

[蓝桥杯2017初赛]贪吃蛇长度-模拟(水题)

题目描述 小明在爷爷的私人收藏馆里找到一台老式电脑。居然没有图形界面&#xff0c;只能用控制台编程。 经过小明的一阵摸索&#xff0c;神奇地设计出了控制台上的贪食蛇游戏。 如下图&#xff0c;是游戏时画面截图。 其中&#xff0c;H表示蛇头&#xff0c;T表示蛇尾。#表示…

蓝屏(BSOD)转储设置,看本文就够了!

前言 我们在内核转储&#xff0c;开抓啦&#xff01;这篇文章里介绍了一个关键的系统设置。设置好后可以让系统在蓝屏&#xff08;Blue Screen of Death&#xff0c;简称 BSOD&#xff09;的时候自动保存转储文件。当时只是简单的介绍了设置步骤&#xff0c;本文力求详细的介绍…

算法---字符串顺序平移

算法—字符串顺序平移 原理&#xff1a;矩阵的转置思想 代码&#xff1a; #include <stdio.h> #include <stdlib.h> void swap(char *a,int i, int j) {//交换二个变量的值char temp a[i];a[i] a[j];a[j] temp; } void invert(char *a,int s, int e) {//对称…

delphi中的函数传参如何传枚举参数_Python基础笔记Day05函数

Python函数 function函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。函数能提高应用的模块性&#xff0c;和代码的重复利用率。Python提供了许多内建函数&#xff0c;比如print()。但你也可以自己创建函数&#xff0c;这被…

[蓝桥杯2018初赛]日志统计-双指针

代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std; typedef pair<int, int>PII; #define x first #define y second const int N 100010; bool st[N]; int n, d, k; PII a[N]; int cnt[N];int main() {cin >> n …

不要错过这轮疫情的“洗牌”机会

大家好&#xff0c;我是Z哥。今天和大家随便聊聊天。这次的疫情对我们所有人影响都很大&#xff0c;除了让你心怀忐忑的过了个春节之外&#xff0c;呆在家的时间对很多人来说也是格外的长。这样的突发事件&#xff0c;除了能看出不同公司之间应对突发状况的能力差异之外&#x…

算法---查找倒数第k个链表的值

算法—查找倒数第k个链表的值 代码&#xff1a; link.h #pragma once #define elemType int #include<stdlib.h> typedef struct link {elemType data;struct link * next; }link; bool initLink(link* &Link) {//初始化链表Link (link*)malloc(sizeof(link));Li…

mysql boolean_产品操作MySQL第7篇 – 运算符 – IS NULL

本资料为产品岗位作为日常工作参考&#xff0c;语言口语化At 2019/4/27 By David.Yang介绍什么是IS NULL IS NULL作为一种运算符&#xff0c;用来对数据表中的NULL值数据进行过滤。语法target IS NULLtarget值为NULL&#xff0c;则表达式返回TRUE&#xff0c;否则返回FALSE。MY…

微软开源Scalar,提升操作巨型Git仓库的速度

Git 属于分布式版本控制系统&#xff0c;默认情况下&#xff0c;每个 Git 仓库都具有整个历史记录的完整文件副本。即便是中等规模的开发团队也会产生数千个提交&#xff0c;每个月向仓库添加几百兆的数据。而随着仓库的占用空间增加&#xff0c;Git 难以管理所有数据&#xff…

word List 41

word List41 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

b树与b+树的区别_面试必考:B树、B树、B+树、B*树图文详解

B树B树又叫做二叉搜索树&#xff0c;倒状的树形结构。如下图所示特点&#xff1a;所有的非子夜节点最多拥有两个子节点树(左子树和右子树)。所有结点存储一个关键字。节点的左右儿子&#xff0c;左边是比该节点小的&#xff0c;右边是比该节点大的。缺点&#xff1a;因为二叉搜…

[蓝桥杯2016初赛]煤球数目-找规律

题目描述 有一堆煤球&#xff0c;堆成三角棱锥形。具体&#xff1a; 第一层放1个&#xff0c; 第二层3个&#xff08;排列成三角形&#xff09;&#xff0c; 第三层6个&#xff08;排列成三角形&#xff09;&#xff0c; 第四层10个&#xff08;排列成三角形&#xff09;&…

.NET Core开发实战(第6课:作用域与对象释放行为)--学习笔记(上)

06 | 作用域与对象释放行为作用域主要由 IServiceScope 这个接口来承载对于实现 IDisposable 类的实例的对象&#xff0c;容器会负责对其生命周期进行管理&#xff0c;使用完毕之后&#xff0c;他会释放这些对象实现 IDisposable 接口类型的释放&#xff1a;1、容器只会负责由其…