[Flutter翻译]嵌入式设备是Flutter的未来吗?

2,228 阅读7分钟

本文由 简悦SimpRead 转码,原文地址 infinum.com

从最初的安卓系统开始,Flutter现在已经支持各种平台和嵌入式设备。......

2015年,Dart开发者峰会上推出了Sky,这是一个实验性的UI框架,用于使用Dart编写Android应用程序。它从安卓开始,但技术架构是这样的:它可以在任何设备上运行--网络、桌面、汽车、冰箱,任何有屏幕的设备。

Sky最终被改名为Flutter,支持的平台列表逐渐扩大到包括iOS、网络和桌面。然而,这几乎不是Flutter的终点,所以我想到的问题是:下一步是什么?我的猜测是嵌入式设备。

我将尝试通过在Raspberry Pi上运行Flutter来说明这一点,以展示一些有趣的用例。

嵌入式方式

Flutter团队一开始只做了安卓系统,但他们通过编写嵌入器,能够增加对其他平台的支持。嵌入器不是一个程序,而是一个由各种任务组成的整个系统,例如。

  • 创建渲染表面。Flutter画布需要映射到平台画布,通常使用一些低级别的图形界面,如OpenGl、Vulkan或Metal。
  • 创建/设置线程并提供事件循环接口,因为Dart是一种单线程语言。
  • 将用户输入(如触摸、指针或按钮)与Flutter进行沟通
  • 将系统事件传达给Flutter
  • 制作可在平台上使用的二进制文件

这些任务需要对我们所嵌入的平台有广泛的了解。这主要是低级别的代码,不适合初学者。完全成熟的嵌入者有15-30k行的源代码。更多信息可以在Flutter的网页上找到。

目前,有三个由Flutter团队编写的默认嵌入器。Android、iOS和web,而Mac、Linux和Windows的桌面嵌入器正在测试中。任何人都可以写一个嵌入器,例如台式机就是从非官方嵌入器go-flutter开始的,官方支持是后来加入的。

一个嵌入式冰箱?

嵌入式设备是一个非常广泛的术语,但并不是每个设备都适合Flutter。首先,一个设备不是一个应用程序,它既有硬件也有软件。这意味着它需要一个嵌入式工程师和有人来设计电路板。

其次,设备需要一个用户界面,因为Flutter是一个UI工具包。不是任何界面都可以的,它需要有一个好的分辨率的屏幕。

几个不适合Flutter的设备

当你找到一个合适的设备,并且硬件已经准备好了,你需要建立软件来驱动用户界面。就目前的技术状况而言,这是一项具有挑战性的任务。硬件的性能有限,而目前你可以用来构建UI界面的工具也有自己的缺点。这就是Flutter所提供的解决方案。

Flutter + Raspberry Pi

我选择Raspberry Pi作为示范,尽管任何类似的设备都可以使用。Raspberry Pi是一种小型的单板低成本计算机,在其上运行Flutter可以产生一些非常有趣的用例。

我们可以使用Flutter附带的默认Linux嵌入器在Raspberry Pi上运行Flutter,因为Raspberry Pi可以运行Linux,但我选择不这样做。主要原因是,Linux嵌入器更适合于具有多个窗口和不同应用程序的真实桌面体验,就像Windows或Mac一样。我们将使用flutter-pi,这是一个轻量级的Raspberry Pi的嵌入器。它根本不需要窗口系统或桌面,它将在没有桌面的树莓派操作系统Lite上运行。

用例#1:用真正的嵌入式感觉来订购汉堡包

在我们的第一个用例中,我们将尝试为一家快餐店制作一个屏幕,可以用来订购食物,而不需要与餐厅人员进行互动。为此,我们将需要一个树莓派和一个触摸屏。我使用了一个Raspberry Pi 3B+和一个7英寸触摸屏

我们建立一个简单的Flutter应用程序,并按照flutter-pi的指示在Raspberry Pi上运行。下面是整个设置运行后的应用程序预览。

有了Flutter,我们就能创建一个外观漂亮的应用程序,并在Raspberry Pi上流畅地运行所有的动画。Flutter-pi使它具有真正的嵌入式感觉,因为用户无法退出应用程序,无法与Linux操作系统互动,也无法关闭整个系统。

用例#2:用GPIO翻转开关

这种设置与Raspberry Pi的真正力量在于,你可以连接外部设备并与它们进行通信。它们可以通过WiFi、蓝牙、USB或电线(GPIO)与Raspberry Pi连接。为了演示,我们将使用Flutter通过GPIO控制一个小的LED灯。

有几种方法来控制GPIO引脚。在这个例子中,我跳过了Python程序,使用了最简单的方法,就是将数值(0或1)回传到一个指定的文件中。每个GPIO引脚都有一个文件,路径是_/sys/class/gpio/gpio27/_。如果我们回显1,这意味着它将让电源通过该引脚,所以灯将打开,而0将切断电源。

有了这些信息,我们可以建立一个应用程序,调用进程命令来打开或关闭LED灯。

我们可以用同样的方式监听按钮的按下,或者与各种传感器互动,例如温度或距离传感器。我们可以运行一个伺服电机、打印机或其他什么东西,因为GPIO几乎没有限制,这只是一个努力的问题。

替代品

当然,还有其他方法来构建一个满足上述用例的产品。让我们看看它们与嵌入式Flutter解决方案相比如何。

iOS或Android平板电脑

由于我们使用的是触摸屏,简单地使用安卓或iOS平板电脑似乎是个好主意。然而,事实并非如此。这就是原因。

  • 用户可以退出应用程序。我们将需要添加变通方法,使操作系统和我们的应用程序表现得像一个亭子。
  • 平板电脑没有GPIO接口,所以我们不能轻易连接到低级别的设备。
  • 我们不能控制硬件。对于我所描述的设置,我们可以单独购买Raspberry Pi 3和任何我们需要的触摸屏,例如一个大的15英寸触摸屏。
  • 与购买芯片和屏幕相比,这很昂贵。

Chromium Kiosk模式或Electron应用程序

还有其他可以在Raspberry Pi上运行的方案,例如Chromium Kiosk模式或Electron应用程序。虽然设置不同,但这两种解决方案都允许你使用流行的网络技术(HTML、JS)来构建应用程序。然而,缺点是运行这些时有很多开销,可能会影响性能。例如,在Chromium Kiosk模式下,你需要在Chromium浏览器上面运行全桌面Linux。浏览器然后运行你的应用程序,而使用flutter-pi,你的应用程序在 "裸机 "Linux上运行。

另一个缺点是,与本地平台和外部设备的通信是有限的。例如,从Javascript到蓝牙模块的通信需要复杂的桥接,因为Javascript从来没有打算执行这种事情。

Qt

Qt的工作原理与Flutter类似,尽管它更专注于桌面和嵌入式设备。你用C++编写Qt应用程序,这是一种不太流行的低级语言。

Qt与平台的集成度更高,所以与原生平台和外部设备的沟通更容易一些。

除了语言之外,Qt的缺点是它不是完全免费的。另外,它比Flutter老得多,而Flutter在性能和UI构建方面带来了一些改进。

Flutter的未来

当Flutter刚推出时,它只能在iOS和Android上运行。我第一次尝试Flutter的桌面版时,使用了一个第三方的嵌入器,方式与Raspberry Pi相似。今天,Flutter桌面版有一个正式的测试版,所以我们只能期待它继续发展,并以同样的方式支持嵌入式平台。

我相信Flutter将成为有屏幕的嵌入式设备的最佳解决方案之一。有了像丰田的信息娱乐系统将由Flutter驱动和谷歌的Nest Hub配备了运行在Fuchsia OS上的Flutter这样的例子,未来看起来很光明。

感谢Josipa Tadić,我们能够将可爱的封面插图植入这篇博文。


www.deepl.com 翻译