作者
LewC
译者
弯月
出品
CSDN(ID:CSDNnews)
我个人是Flutters的忠实粉丝。我非常喜欢Flutter,以至于有些项目最初选用了其他编程语言,而且几乎已编写完成,但后来我决定弃用,并改用Flutter重写,因为我相信为了将想法转化为应用程序,使用Flutter是最简单的方法。我曾写过一些关于Flutter的文章,而且还花了大把时间创建有关Flutter的内容。
为此,我投入了大量时间研究Flutter应用。我非常希望Flutter能够在Windows上稳定运行。近几年来,Windows开发一直处于萎靡不振的状态,实际上,几乎没有人制作Windows原生应用程序。大多数应用都是Electron或渐进式Web应用。
根据在Android和iOS上开发Flutter应用的经历来看,我认为Flutter整体都保持了高质量。从UI的布局方式到“本周小工具推荐”的推广视频,Flutter的一切都让我着迷。然而,在年初,我尝试了Flutter对Windows的支持,我认为目前该项目还处于实验性阶段,要达到稳定状态还有很长的路要走。
CSDN付费下载自视觉中国
Flutter为了支持Windows,并达到如今的水平已经付出了艰辛的努力。但是,目前的状态仍然非常粗糙,几乎无法正常使用。平心而论,如果只是想创建一个简单的应用,不需要与Windows平台集成,或者有现成的插件,那么完全没问题。如果你只想为朋友或同事创建一个简单的应用,不必关心应用是否会崩溃,那么也不会有任何问题。
但是,既然Flutter已经打上了“稳定版”的标签,它对Windows的支持就应该能达到生产水平,并且能够像其他稳定的、受支持的平台(如Android或iOS)一样轻松使用。
我认为“同等水平的稳定体验”指的是平台能够获得全面的支持,就像iOS和Android一样,而且具有良好的体验。然而,尽管Windows平台的Flutter也是“稳定”的,但体验却完全不同。与Flutters对Android和iOS的支持相比,Flutter对Windows的支持有以下明显的缺陷:
为了创建插件,需要掌握C++。而实际上在Windows上开发应用本来应该使用C#或.NET才对。
如果应用想集成其他原生C++库,则需要掌握C++和CMake。
原生库抛出的异常往往会导致应用在桌面系统上崩溃,但在移动设备上,原生异常似乎不会导致应用直接退出。
缺乏文档陈述基本工作原理,以及CMake的构建过程(CMakeLists.txt中只有非常简单的注释)。
Android和iOS版本会针对目标设备生成一个可安装的文件。而Windows的构建只能生成一堆文件,你必须自行打包。
这是因为在iOS上使用Flutter和在Windows上使用(两者都是“稳定”平台)的体验截然不同。根据我的经验,感觉Flutter在移动端“非常稳定”,但在桌面系统上的体验却一言难尽……
下面,我们就来详细讨论其中的一些关键点。
使用极其不方便的平台框架
大多数Flutter应用既可以使用基本框架提供的功能,也可以使用插件提供的功能。如果你只想创建一个计算器,则不需要使用任何工具包。但是,如果你想创建一个可切换模式的计算器,并保存用户当前的模式,则需要使用shared_preferences之类的包。
这类的包带有“平台实现”,即指定在相应的底层平台上应该执行何种操作。而“平台通道”则可以将信息从多个平台的Flutter代码传输给这些特定于平台的实现。
有时,现有的插件或包无法满足你的需求,你需要自己动手实现。在Android和iOS上,自己动手实现没有任何问题,而且效果很好。对于iOS,你可以使用Swift或Objective-C;而对于Android,你可以使用Java或Kotlin。你甚至可以利用包来生成一些绑定,并享受额外的类型安全。
CSDN付费下载自视觉中国
对于Android开发,我们自然会选择Java或Kotlin;而对于Windows,我们会选择.NET。理由非常充分,因为该语言能够在易用性和性能之间取得良好的平衡,同时还可以减少开发人员编写应用所花费的时间。
另外,现在已有成千上万(当前约有,个)的NuGet包,它们几乎覆盖了Windows所有的功能和外围设备。在Windows上构建Flutter应用时,了解C#与平台通道的基本知识,可以降低编写特定于平台的代码的难度。
Windows平台上的Flutter应用实际上只是Win32应用。如果想编写特定于平台的代码,你必须使用C++编写代码。然而,使用C++的NuGet包数量非常少。如果你想使用特定于平台的功能,就需要花费大量时间在Windows上用C++重新实现这些功能。
核心问题
假设你想在Windows上编写一个Flutter应用,但你的应用打算利用特定平台特定的功能,可惜没有现成的库可以使用,于是你决定自己写一个。
那么,上哪儿去找相关的文档呢?Flutter网站上有很多Android和iOS相关的文档,所以我们假定照猫画虎也能在Windows上实现。例如,这个网页(