我们的使命是为开发者提供一个开源的高效框架,帮助他们在任何平台上构建美观的原生应用。截至目前,我们已经为 Android 和 iOS 带来了生产级别的支持,发布了 8 个稳定版本,仅在 Google Play 商店中就有超过 10 万款应用使用 Flutter。我们在继续努力,将支持范围扩展至 web、macOS 和 Linux 等其他平台。如今,Flutter 的另一个目标,即支持 Windows 的 Flutter Alpha 版本已经发布。
Windows 仍然是台式机和笔记本电脑设备的热门选择,据 Microsoft 报告称,Windows 10 的活跃设备数量超过 10 亿台。我们的统计数据显示,超过一半的 Flutter 开发者使用 Windows,自然 Flutter 应该支持该系统。原生桌面支持为 Flutter 提供了各种可能性,着实令人感到兴奋,其中包括开发工具的改进和新用户负担的降低,当然,还可以让开发者能通过单个代码库为用户可能拥有的任何设备打造应用。
将 Windows 支持添加至 Flutter
正如我们在架构概览中所说的那样,Flutter 是一个跨平台界面工具包,旨在实现不同操作系统 (如 iOS 和 Android) 之间的代码重用,同时让应用可以直接与底层平台服务对接。我们的目标是让开发者能够交付高性能且在不同平台上都能自然流畅运行的应用,在尽可能共享代码的同时,包容不同平台间存在的差异。Flutter 的核心是引擎,用于支持必要的原语,为所有 Flutter 应用提供支持。每当需要绘制新的帧时,引擎负责对合成场景进行栅格化。引擎提供了 Flutter 核心 API 的底层实现,包括图形、文本布局、文件和网络 I/O、无障碍功能支持、插件架构以及 Dart 运行时和编译工具链。
每当我们将新的目标平台添加到 Flutter,我们都会用新服务对核心框架进行扩展,使其能够在该平台上良好运行。我们先在 Android 和 iOS 上实现了 Material Design,以及适用于移动设备的触控界面,以便在这两个移动平台上实现像素级完美的体验。在 web、Windows、macOS 和 Linux 这些桌面环境中,Flutter 也提供了一整套全新的服务,包括对键盘、鼠标、滚轮和控制器等输入方式的强大支持,以及能适配这些平台的 widget (有些 widget 甚至在 web 和桌面应用的大屏幕上工作得更好)。
此外,每个新平台不仅会影响 Flutter 的框架和引擎,还会影响许多其他方面:
工具链更新: 为 CLI 和 IDE 工具添加新目标平台(例如本文中的 Windows)
Shell: 支持通过 WM_* 消息处理来自 Windows 的输入,并通过 ANGLE 实现输出,ANGLE 使用 Skia 以原生速度渲染至底层的 DirectX 接口
Runner: 每个项目都会通过一个容器应用运行在目标平台上。对于 Windows,该容器应用是一个 Win32/C++ 程序,可以加载您的 Flutter 代码并在运行时执行。如果您需要,可以在这里为应用添加原生代码。
插件: 插件是其自身所支持的每个平台的 Dart 代码和原生代码的集合。原生代码需要添加至每个插件中,而这些插件会被编译到您的 Windows 版 Flutter 应用中。
ANGLE https://opensource.google/projects/angle
Skia https://skia.org/
本次发布的 alpha 版本为我们未来几个月的工作打下了坚实的基础。凭借对 Windows 7 和更高版本的支持,我们希望它能给喜欢尝鲜的开发者提供一个出发点。
示例应用介绍
要实际了解 Flutter 对 Windows 的支持,可以查看我们创建的一些示例应用,这些应用通过我们新增的支持,在 Windows 上运行良好。第一个示例是 Flokk 应用,它是我们与 gskinner.com 的设计师和开发者合作的成果。我们旨在通过创建一个富有创意且美观的 Flutter 桌面应用,表明 Flutter 已经为桌面做好准备。Flokk 这款应用可以使用您的真实 Google Contacts 数据,并显示您的联系人在 GitHub 和 Twitter 上的活动。
您如果想在自己的 Windows 设备上使用 Flokk 应用,可以在 GitHub 上下载最新版本。如果您想了解 gskinner 是如何开发这款应用的,可以看看他们的博文: Flokk - 我们如何使用 Flutter 构建桌面应用。
https://github.com/gskinnerTeam/Flokk/releases
此外,我们的示例应用 Flutter Gallery 可以为您展示 Flutter 的各个方面,这款应用最近进行了完全重写,以增加对桌面设备的支持。因此,我们能够确保其在 web、Windows、macOS 和 Linux 上运行良好。
Flutter Gallery 中的许多案例代表了不同理念的应用风格,我们推荐您在使用 Flutter 设计自己的 Windows 应用时进行参考。如果感兴趣,您可以在 GitHub 上找到源代码。
https://github.com/flutter/gallery
开始使用 Flutter for Windows
请先按照 Windows 安装说明开始安装 Flutter SDK。要以 Windows 桌面设备为目标,您首先需要安装桌面文档中所述的工具。默认情况下,Flutter 假定您正在构建正式版软件,并且没有为开发 Windows 应用而进行配置。不过,这很容易通过命令行解决:
$ flutter channel dev
$ flutter upgrade
$ flutter config --enable-windows-desktop
在 Windows 系统上安装和配置 Flutter 开发环境 https://flutter.cn/docs/get-started/install/windows
桌面文档中所述的工具 https://flutter.cn/desktop#additional-windows-requirements
第一个命令将 Flutter 设置为使用实验性 "dev" 渠道 (而不是默认的 "stable" 渠道)。这样您就可以使用仍在 alpha 阶段的平台支持,例如 Windows。第二个命令可以获取该渠道上的最新版本。第三个命令使您可以在 PC 上开发 Windows 应用。
完成这些设置后,每次您通过 Android Studio 或 Visual Studio Code 扩展程序,或者通过命令行创建新的 Flutter 应用时,都会创建一个 Windows 子文件夹。
Android Studio https://flutter.cn/docs/get-started/editor?tab=androidstudio
Visual Studio Code https://flutter.cn/docs/get-started/editor?tab=vscode
如果您感到好奇,请在 Windows 上运行默认应用,如下所示:
在您创建好应用后,构建该应用会生成一个发布模式的原生 EXE 文件以及必要的支持 DLL。如果您想在任何尚未安装 Flutter 的 Windows 10 设备上运行这个新的 Windows 应用,可以按照这里的说明压缩打包必要的文件。
Windows 插件
尽管目前 Windows 支持还是 alpha 版本,但是 Flutter 的社区成员们已经在着手开发 Windows 插件了。包括:
url_launcher: 从您的应用中启动浏览器并打开给定的 URL
https://pub.flutter-io.cn/packages/url_launcher
path_provider: 提供用户设备上特殊目录的路径,如 Documents 和 temp
https://pub.flutter-io.cn/packages/path_provider
shared_preferences: 将用户偏好设置序列化到磁盘上,从而在您的应用会话之间共享
https://pub.flutter-io.cn/packages/shared_preferences
biometric_storage: 由生物特征加密的存储
https://pub.flutter-io.cn/packages/biometric_storage
flutter_audio_desktop: 在桌面应用中播放音频
https://pub.flutter-io.cn/packages/flutter_audio_desktop
使用这些插件的好处是,其中大多数还支持其他 Flutter 平台,这样您就可以将自己的应用适配至 Android、iOS、web、Windows 等平台。此外,尽管在 pub.dev (Dart 和 Flutter 的 package 管理平台) 上,大约三分之一的 package 是包含平台特定代码的插件,但大多数插件并非如此。例如,许多最高质量和最常用的 package 位列 Flutter Favorite 计划清单,其中大多数可以在 Windows 上运行。您如果想查看可在 Windows 上运行的 package 的完整列表,可以在 pub.dev 上查询。
Flutter Favorite https://pub.flutter-io.cn/flutter/favorites
适用于 Windows 平台的 package https://pub.flutter-io.cn/flutter/packages?platform=windows
与 Windows 互操作
您也可以构建自己的 Windows 插件。当您位于 dev 渠道并为设备启用了 Windows 开发功能后,可以使用以下命令:
$ flutter create --template plugin --platforms windows hello_plugin
此时,您能够将自己的 Flutter 代码添加到 lib 子文件夹中,并将 Windows 代码添加到插件项目的 Windows 子文件夹中。您将使用 Platform Channels (平台通道) 在两个堆栈之间进行通信,本质上就是 Dart 与 C++ 代码之间的消息传递。有关这个话题的最佳示例,请参阅 url_launcher 的实现。
撰写双端平台代码 (插件编写实现)
https://flutter.cn/docs/development/platform-integration/platform-channels
url_launcher 的实现
https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_windows
但是,平台通道不是您与 Windows 互操作的唯一选择。您还可以使用 Dart FFI (外部函数接口) 来加载库,并调用 C 样式的 API,例如 Win32 API。正如您在 GitHub repo 中看到的那样,path_provider 插件使用 FFI 实现,这与使用平台通道的 url_launcher 有所不同。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');
使用 dart:ffi 调用原生代码 https://flutter.cn/docs/development/platform-integration/c-interop
path_provider (Windows 版) https://github.com/flutter/plugins/tree/master/packages/path_provider/path_provider_windows
这段代码不存在平台通道那样在两个线程之间转换的问题。FFI 包括对许多不同种类 API 的支持,包括 Win32、WinRT 和 COM。但先别急着自己去封装基于 C 的整个 Windows API,请去看看 win32 插件,它已经在做这件事情了,而且做得很好。事实上,path_provider 插件本身就是使用 win32 插件来实现的。有关 win32 插件的开发过程及工作原理,请阅读《使用 Dart FFI 提升 Windows 开发乐趣》。
Win32 插件 https://pub.flutter-io.cn/packages/win32
path_provider https://pub.flutter-io.cn/packages/path_provider
使用 Dart FFI 提升 Windows 开发乐趣 https://medium.com/@timsneath/windows-fun-with-dart-ffi-687c4619e78d
Flutter for Windows 的资源
无论您处于 Flutter for Windows 历程的哪个阶段,都应该阅读 flutter.dev 上的桌面端开发文档,其中包括最新的详细信息。此外,您还可以通过 codelab 熟悉编写 Windows、macOS 和 Windows 的桌面 Flutter 应用,其中包括使用 OAuth 进行身份验证、访问 GitHub API 和使用 GraphQL 等真实场景的代码。或者查看另外一个可在 Windows 上运行的 Flutter 桌面代码示例 Photo Search。
Flutter 桌面支持 http://flutter.cn/desktop
Codelab https://codelabs.developers.google.com/codelabs/flutter-github-graphql-client
PhotoSearc hhttps://github.com/flutter/samples/tree/master/experimental/desktop_photo_search
Photo Search 使用标准的 Windows 文件打开对话框、树形视图 widget、拆分视图 widget,并使用真实的 REST API 呈现检索结果。
至于其他面向桌面的 widget,我们推荐菜单栏 (menubar) 插件、NavigationRail widget 和 DataTable widget。您还可能对 InteractiveViewer widget 感兴趣,它提供完整的桌面支持,可让您通过鼠标动作来平移和缩放其子 widget。
Menubar https://github.com/google/flutter-desktop-embedding/tree/master/plugins/menubar
NavigationRail https://api.flutter.cn/flutter/material/NavigationRail-class.html
DataTable https://api.flutter.cn/flutter/material/DataTable-class.html
InteractiveViewer https://api.flutter.cn/flutter/widgets/InteractiveViewer-class.html
另一组相当有用的 widget 来自 SyncFusion,他们在 Windows 开发社区中已经广为人知,并为创建图表、计量槽、数据网格等工作提供了大量企业级品质的 widget。
这些 widget 均有社区和企业使用许可,因此您可以放心寻找适合自己项目的工具。
Flutter for Windows 应用案例
除了 Windows (以及广义上的 Flutter 桌面支持) package 和插件之外,Flutter 开发者也一直在构建用于 Windows 的优秀应用,比如 Invoice Ninja 的这一实验性作品:
Invoice Ninja
https://www.invoiceninja.com/
Invoice Ninja 是一家提供收据软件的公司,Flutter 为其盈利带来了坚实的助力。他们的软件目前支持 Android 和 iOS 系统,并且在 web 上提供产品演示,为用户提供桌面版本已经在公司的计划之内。
Invoice Ninja 过去一直疲于奔命,却只能为 web 和移动端提供支持,曾经一度维护着三个独立的代码库。借助 Flutter 以及最近的 Flutter Desktop,我们已经能够使用单个代码库为每个主流平台构建应用。我们几乎是零成本地获得了应用的桌面版本,而且其性能是所有版本中最好的!
— Hillel Coren,Invoice Ninja 联合创始人
如果您希望在移动和桌面设备上构建一个真实、可盈利的 Flutter 应用,可以访问 GitHub 获取其源代码进行参考。
Aartos 佳作颇多,实时无人机检测系统就是其中之一,他们使用 Flutter 在多个平台上构建该系统的客户端软件。这个视频是一个早期版本的 Windows 客户端,和其移动客户端同时运行。
Aartos https://drone-detection-system.com/
无人机检测系统客户端软件 https://drone-detection-system.com/aartos-dds/product-overview/
Windows 端演示视频 https://www.bilibili.com/video/BV1p54y1R79t/
iOS 和 Windows 两个版本共用完全相同的代码库。
如果您是一个有经验的 Flutter 开发者,您可能会发现自己需要在不同版本的 Flutter 之间来回切换: 例如一个版本用于发布正式版本的移动应用,另一个版本则用于试验 Windows alpha,那么您可能会喜欢 Flutter Version Manager (版本管理器),它现在带有 Windows 图形用户界面,您可以在这里下载。
Flutter Version Manager https://github.com/leoafarias/fvm/releases
演示视频 https://www.bilibili.com/video/BV1LK411A7MX/
此工具已开放源代码,您可以亲自见证 Leo 是怎样让它看起来如此出色的。
未来计划
发布了 alpha 版之后,我们的注意力将转移到完善功能集和稳定产品上来。作为一个开源项目,您可以在 GitHub 上跟踪 beta 版的进展,还剩下一些工作需要完成,包括无障碍功能、全球化与本地化、增强的键盘与文本处理、对命令行参数的支持等。
除了支持经典的 Win32 API 外,我们还在试验基于 UWP 的 Flutter 容器应用,该版本可以让 Flutter 登陆更多 Windows 设备,包括 Xbox。作为该试验的一部分,本周我们在 Windows Store 上发布了一个基于 UWP 的 Flutter Gallery。
UWP https://docs.microsoft.com/en-us/windows/uwp/get-started/universal-application-platform-guide
Windows Store: Flutter Gallery https://www.microsoft.com/en-us/p/flutter-gallery/9pdwctdfc7qq
以下屏幕截图显示了在 Xbox 上运行的基于 UWP 的 Flutter Gallery:
下图是在一个双屏 Windows 设备 (在 Windows 10X 模拟器上) 运行的同一个应用:
您可以在 GitHub 上详细了解 Flutter for UWP 的进展。
总结
本次的 alpha 版本将 Flutter 的强大功能引入 Windows,为开发者提供了声明式、可组合和响应性的架构。该版本对 Material 规范的适应性实现,可以让您按照自己的需求来设计应用,并使用全套的 Flutter 开发和调试工具。您的应用在开发完成后将编译为原生 64 位代码,如同任何其他原生应用一样,您可以将其打包并在其他 Windows 设备上运行。最后,您可以使用相同的代码库,为 Android、iOS、web、macOS 和 Linux 平台打造应用。
如果您希望使用 Flutter 开始构建 Windows 应用,我们期待听到您的反馈!如果您更喜欢运用您的 Windows 专业知识来构建热门插件的 Windows 实现,或者为 Flutter 构建一些 Windows 专用的工具 (比如通过 flutter build windows 命令的输出结果创建 MSIX 的命令行工具),我们也热烈欢迎!
提交反馈 https://github.com/flutter/flutter/issues
构建热门插件的 Windows 实现 https://flutter.cn/docs/development/packages-and-plugins/developing-packages#plugin
随着 Flutter 开始支持 Windows,您打算构建怎样的精彩应用呢?欢迎在评论区和我们分享您的想法。
本文由哈喽比特于4年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/KHZvhtQNTgrjhyYP17orsA
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。