什么是Flutter?适用于安卓、iOS 等的移动应用开发
Flutter 使您能够从一个代码库中构建编译的、跨平台的移动、桌面和网络应用。下面是对Flutter及其易于使用的编程语言Dart的简要介绍。
作者: Martin Heller
InfoWorld特约编辑
目录
显示更多
曾几何时,您不得不在创建通用移动应用程序和本地应用程序之间做出选择。通用应用程序使用网页技术,如HTML和JavaScript,这在移动设备中往往表现不佳。原生应用的表现更好,因为它们是为你想要支持的每个平台单独编写的,但它们很昂贵,而且需要为每个平台配备专门的开发团队。
谷歌开发的开源框架Flutter改变了这一点。今天,开发者有更多选择来创建在多个平台上运行的快速移动应用程序,包括Ionic、React Native和Xamarin。Flutter及其内置的编程语言Dart仍然很受欢迎并被广泛使用。
[也在InfoWorld上。Reactive JavaScript。前端架构的演变]
今年早些时候发布的Flutter 3,除了原有的Android、iOS、Web和Windows目标之外,还增加了对macOS和Linux桌面应用的支持。该版本还包括性能改进,以修复明显的UI停顿。
用Flutter 3进行多平台开发
Flutter是一个由谷歌开发的开源框架,可以让你从一个代码库中构建原生编译的多平台应用程序。Flutter 3支持六个平台目标。Android、iOS、Windows、macOS、Linux和网络应用。
Flutter小部件是使用受React启发的现代框架构建的。如下图1所示,最常用的小部件和布局是文本小部件、Flexbox行和列布局、堆栈绝对定位布局、定位小部件和容器小部件。
假设你正在构建一个多平台的应用程序,它以FlutterMaterialApp小组件为起点。这个小组件在你的应用程序的根部建立了各种其他有用的小组件,包括一个导航器。导航器管理着一个由字符串标识的小部件堆栈,在Flutter中也被称为路由。导航器可以让你在应用程序屏幕之间平滑过渡。
要创建一个以iOS为中心的设计,请参阅Cupertino组件包。Flutter团队建议只在仅有iOS的应用程序上使用Cupertino组件;对于多平台的应用程序,考虑使用另一套部件;例如,Material Design套件。
下面的前三张截图显示了无状态小部件、手势处理和有状态小部件。从我们在这里开始的widget介绍开始,通过整个Flutter开发教程是值得的。也值得尝试DartPad样本和查看Flutter画廊,以及尝试Flutter代码实验室。
除了部件和布局,Flutter还有导航和路由、动画、动作和意图、快捷键、状态管理、网络和HTTP、JSON序列化和Firebase集成。
图1显示了一个在网络浏览器中使用DartPad的Flutter材料小部件的例子。左边是Dart代码,右边是网页显示。
IDG
图1.一个使用DartPad的Flutter材料部件的例子。
图2显示了Flutter中手势处理的一个例子。连接到Engage按钮的无状态GestureDetector widget的onTap 方法在按钮被按下时启动。
IDG
图2.Flutter手势处理实例。
图3是一个有状态小部件的例子。按下IncrementElevatedButton部件会触发其onPressed 方法,该方法会调用私有函数_increment 。该方法调用setState() ,告诉Flutter有什么变化,并增加_counter 变量。然后,框架会调用build() 方法来重新绘制按钮和文本。
IDG
图3.一个有状态的widget例子。
Flutter和Dart
Flutter由Dart驱动,这是一种为任何平台上的快速应用而优化的语言。Dart看起来相当像Java、Kotlin、Swift和TypeScript(见图4的比较)。如果你了解任何面向对象的语言,你将能够快速掌握Dart。至少要经历一下Dart之旅,这是值得的。
一个非常基本的Dart程序可能是。
// Define a function.
void printInteger(int aNumber) {
print('The number is $aNumber.'); // Print to console.
}
// This is where the app starts executing.
void main() {
var number = 42; // Declare and initialize a variable.
printInteger(number); // Call a function.
}
Dart是强类型的,但类型注释是可选的,因为Dart可以推断类型。首选的风格是对局部变量使用var 和类型推断,对函数和公共变量使用强类型化。与Java不同,Dart没有关键字public 、protected 、private 。如果一个标识符以下划线开头(_),它就属于其库的隐私。
Dart可以编译成ARM和x64机器代码,用于移动、桌面和后端应用程序,也可以编译成网络的JavaScript。在调试模式下,Dart允许你在保存对源代码的修改后热加载正在运行的应用程序。Dart有JIT(just-in-time)和AOT( ahead-of-time)两种编译器。
Dart有可选的null safety。如果你的最小SDK约束(在你的应用程序的pubspec.yaml 文件中)至少是2.12.0,那么你已经选择了空安全。在这种情况下,只有类型后面带问号的变量(例如,"int?" )才允许包含空值。
IDG
图4.Dart与Kotlin、Swift和TypeScript的比较。
Flutter 3的功能和升级
在一篇博文中,谷歌负责Flutter和Dart的产品经理Tim Sneath总结了Flutter 3的新功能,指出 "Flutter 3完成了我们从以移动为中心到多平台框架的路线图。"
Flutter 3扩大了可用的平台目标,包括对macOS和Linux桌面应用的支持,将Flutter与Firebase完全整合,增加了对Apple Silicon的原生开发支持,并包括许多生产力和性能特性。
Flutter展示厅和Flutter画廊
Flutter Showcase本质上是一个关于用Flutter构建的生产应用程序的案例研究集合。它对考虑使用 Flutter 的管理人员最有用。
Flutter 图库是一个小部件、行为和小插曲的集合,展示了 Flutter 的作用和行为方式,对开发人员和设计师最有用。您可以在网络上查看图库,也可以使用Flutter 图库资源库在任何支持的平台上本地运行它。
安装 Flutter
您可以在 Windows、macOS、Linux 或 Chrome OS 上安装 Flutter。具体的安装方式取决于系统。您可以选择下载一个特定系统的.zip文件或tarball并解压,或克隆软件库。然后,你需要将flutter 工具添加到你的路径,并运行flutter doctor 。我在下面显示了flutter doctor 的输出。
Running "flutter pub get" in flutter_tools... 5.1s
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.0.1, on Mac OS X 10.15.7 19H1922 darwin-x64,
locale en-US)
[✗] Android toolchain - develop for Android devices
✗ Unable to locate Android SDK.
Install Android Studio from:
https://developer.android.com/studio/index.html
On first launch it will assist you in installing the Android SDK
components.
(or visit https://flutter.dev/docs/get-started/install/macos#android-setup
for detailed instructions).
If the Android SDK has been installed to a custom location, please use
`flutter config --android-sdk` to update to that location.
[!] Xcode - develop for iOS and macOS (Xcode 12.4)
✗ Flutter requires Xcode 13 or higher.
Download the latest version or update via the Mac App Store.
✗ CocoaPods not installed.
CocoaPods is used to retrieve the iOS and macOS platform side's plugin
code that responds to your plugin usage on the Dart side.
Without CocoaPods, plugins will not work on iOS or macOS.
For more info, see https://flutter.dev/platform-plugins
To install see
https://guides.cocoapods.org/using/getting-started.html#installation for
instructions.
[✓] Chrome - develop for the web
[!] Android Studio (not installed)
[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.1)
[✓] VS Code (version 1.67.1)
[✓] Connected device (2 available)
[✓] HTTP Host Availability
你可以在输出中看到,我的Intel MacBook Pro太老了,无法支持iOS和macOS Flutter开发所需的最低版本的Xcode。Flutter团队需要Xcode 13来创建通用的Intel/M1 macOS二进制文件。我可以通过安装Android SDK工具链来为Android开发,而且我已经可以为网络开发。在Visual Studio Code中添加Flutter插件只花了不到一分钟。如果我认真对待用Flutter开发多平台应用程序,我将需要至少升级我的一台Mac。
总结
Flutter 3是一个有趣的基准,在六个平台上提供了稳定性,同时继续专注于性能改进。对于需要创建多平台应用程序的开发者来说,现在可能是考虑Flutter的好时机。
相关的。
Martin Heller是InfoWorld的特约编辑和评论员。他以前是一名网络和Windows编程顾问,从1986年到2010年开发了数据库、软件和网站。最近,他在Alpha软件公司担任技术和教育副总裁,在Tubifi公司担任董事长和CEO。
关注
版权所有©2022年IDG通讯公司。