很多人还不熟悉甚至没听过Flutter,只知道它是用来搞移动端开发的,现在Android和iOS开发已经很成熟了,还有RN(React Native)框架,为什么谷歌还要搞一个Flutter,它能够做什么,究竟比别人好在哪里,有什么优势和不足,又是怎么做到的?下面是一些关于Flutter的常见问题,参考文章(英文版)。
相信看完之后你就真相大白了。
什么是Flutter?
Flutter是移动端开发SDK,包括框架,控件和工具等,能开发出漂亮的移动端APP,且同时支持Android和iOS。
Flutter为谁而生?
如果你是移动端开发者,并且想以快速而又简单的方式开发漂亮的APP,那么Flutter是为你而生。
我能使用Flutter开发什么样的APP?
Flutter为运行在Android和iOS的2D APP而优化。Flutter开发的APP既适用于简单场景,比如传递品牌价值,也适用于复杂场景,比如股票交易平台。你可以用Flutter开发出各种有特点的APP,比如相机,地理定位,网络,存储和第三方SDK等待。
有哪些人使用了Flutter?
Google公司的销售工具APP-商店管理APP和Newsvoice的Android和iOS端的APP都是用Flutter开发的,还有一些其他正在用Flutter开发的APP。
Flutter的特别之处在哪里?
Flutter既不使用WebView,也不使用系统的原生控件,而是通过高性能的渲染引擎来画控件。除此之外,Flutter不同是因为它只有C/C++代码编写的单一层,这样开发者更容易控制系统,或者说更容易读取或者修改系统的组件,手势,动画框架和控件等等。
我应该用Flutter开发我的下一个APP产品吗?
Flutter正在开发中并尚未达1.0版,不过API很稳定,你需要的特点基本上已经都提供了,所以最终取决于你自己。
Flutter SDK包括哪些东西?
*深度优化,手机优先的2D渲染引擎以及对文本的极佳支持。
*Rx(响应式编程)框架
*针对Android和iOS丰富的控件集合
*提供单元和集成测试API
*提供连接系统和第三方SDK的API
*使用命令行来create, build,test 和 compile APP
Flutter工作是否需要编辑器或者IDE?
在IntelliJ IDEA(同时支持Ultimate和Community版本)里面安装Flutter插件即可工作。或者你可以结合flutter命令行和支持编辑Dart的编辑器。
Flutter是否包含框架?
是的,有响应式编程框架,灵感来源于React框架。不过该框架是可选的,开发者可以选择使用该框架的一部分或者换一个其他框架。
Flutter包含依赖注入(dependency injection)框架吗?
暂时没有
Flutter用什么技术构建的?
C, C++, Dart, and Skia (2D 渲染引擎)
Flutter如何将代码运行在Android上?
引擎的C/C++代码使用Android的NDK编译的,并且框架的大部分和APP代码作为本地代码(由Dart编译器编译的)运行的。
Flutter如何将代码运行在iOS上?
引擎的C/C++代码使用LLVM编译,并且任何Dart代码都是AOT编译成本地代码。
Flutter使用了我的系统的原生(OEM)控件吗?
没有,Flutter提供了一系列的MD风格和Cuperitno(iOS风格)风格的控件,假如我们复用OEM控件,那么FLutter APP的性能会被这些控件质量所限制。
FLutter支持哪些操作系统?
支持Linux, Mac和Windows。
开发FLutter使用什么语言?
使用Dart语言,其底层图表框架和Dart虚拟机用C/C++实现。
为什么FLutter选择使用Dart?
选择一门编程语言遵循如下标准:
*提高开发效率:一套代码运行在iOS和Android,极大地加速开发。
*面向对象:FLutter需要创建可视的用户体验,所以被选择的语言应该是面向对象编程,并且在构建UI框架上经验丰富。如果选择非面向对象语言就是重复造轮子。
*可以预见的,高性能的:FLutter旨在让开发者开发更迅速,让用户体验更流畅。为了实现该目标,需要每个动画帧能够运行大量的代码,也意味着被选择的语言能同时传递高性能和传递可预见的性能,而不是由于周期性停顿而引起丢帧。
*快速分配内存:FLutter框架使用了Rx响应式编程,它依赖于底层内存分配器(处理小而短的内存分配),所以被选择的语言需要有该特性。
Dart语言满足这四个条件,除此之外,我们还有机会与Dart社区一起近距离工作(不断完善Dart以便在Flutter中更好的使用)。
Flutter引擎有多大?
2017年5月,我们测量了Flutter APP的最小尺寸(没有MD风格,仅仅是Center控件),release版apk接近6.7M。在这个最小apk中,核心引擎大约3.3M,框架和APP代码约1.25M,LICENSE文件(在app.flx中)约55k,必须的Java代码(classes.dex)是40k,还有2.1M的ICU数据。你也可以自己测量你的APP大小,执行flutter build apk 并查看 app/outputs/apk/app-release.apk。
Flutter APP性能究竟如何?
性能很优秀,Flutter是为60fps而设计的,Flutter运行的是编译后的代码,而不是解释性程序,这意味着Flutter能快速启动。
从IDE下载程序到手机需要多长时间?
Flutter有热加载(hot reload)功能,亚秒级加载时间。热加载功能是状态保持的(stateful),也就是说热加载后APP状态是保留的,这意味着你可以快速重复屏幕内容而不需要从主屏幕开始加载。
热加载与完全重启哪里不同?
热加载是注入源代码到运行中的Dart虚拟机,包括增加新的类,和给已有类增加新的方法和变量以及修改已有方法。下面几种情况热加载无效:
*全局变量初始化
*静态变量初始化
*修改main()方法
Flutter APP支持的设备和操作系统版本?
支持的手机操作系统:Android Jelly Bean, v16, 4.1.x or newer, and iOS 8 or newer
手机硬件:64-bit iOS 手机(从iPhone 5S开始), and ARM Android 手机。
支持Android 和iOS物理设备,支持Android和iOS模拟器,不支持平板。
Flutter能在web上运行吗?
不支持
Flutter支持开发桌面APP吗?
手机开发优先,鼓励以其他的方式使用开源的Flutter。
能在已经存在的原生APP中使用Flutter吗?
可以,你可以嵌入Flutter视图到你已经存在的Android和iOSAPP中,相关文档正在开发中。
能访问跨平台的服务和API吗,比如传感器和本地存储?
可以,Flutter支持开发者开箱即用来访问一些平台特性的服务和API。然而,为了避免大多数跨平台API出现的”最小公分母”问题,我们不打算支持所有的跨平台服务和API。最后,鼓励开发者使用Flutter的异步消息来创建平台和第三方API综合体。
控件能够继承和自定义吗?
当然可以,Flutter的控件系统被设计为很容易自定义。Flutter并没有为每一个控件提供很多参数,而是提供创作。比如说,RaisedButton 控件并不是普通button控件的子类,而是Material 控件和GestureDetector控件的组合,前者提供视觉设计,后者提供交互设计。如果你想创建一个自定义视觉设计的button控件,可以与实现了你的视觉设计的GestureDetector控件相结合,比如说CupertinoButton控件。视觉设计与交互设计的结合创作赋予开发者最大的控制权,并且还能复用大量代码。我们已经将复杂的控件分解为多个独立的控件(分别实现视觉,交互和手势),你可以任意组合。
能与手机平台默认编程语言交互吗?
可以,能与开发Android的Java代码和开发iOS的 Objective-C或Swift交互,Flutter APP与手机平台通过BasicMessageChannel传递消息。
Flutter中的internationalization (i18n), localization (l10n), and accessibility (a11y)?
基本支持Android和iOS的 accessibility,鼓励开发者使用 intl package(需翻墙)来 internationalization 和localization。
Flutter开发中并行和并发问题?
Flutter支持虚拟机的堆隔离,所以支持并行,隔离后通过异步消息通信。暂不支持共享内存并发解决方案。
Flutter能使用JSON/XML/protobuffers等吗?
当然可以,https://pub.dartlang.org上面有相关库。
Flutter能开发3D (OpenGL) APP吗?
暂不支持
为什么APK 或 IPA包这么大?
一般assets文件夹包括图片,音频文件和字体等占据了apk或IPA主要体积。同时release版本比debug版本要小很多。
为什么build()方法在State对象里而不是在StatefulWidget控件里?
这是为了当子类是StatefulWidget控件的时候给予开发者更多弹性控件,详情请参考
为什么APP右上角有“Slow Mode”条幅?
这是因为使用了调试模式,安装release版本就没有了。
苹果公司会拒绝Flutter APP吗?
目前是允许的,虽然苹果公司的政策每年都会变化,但我们会尽全力保证Flutter APP能发布到苹果公司的App Store。
这篇文章主要回答了一些关于Flutter的常见问题,如果你对Flutter一无所知,那么阅读完这篇文章后对Flutter的各方面算是了解了,Flutter值得花精力学习吗,Flutter的成熟度与稳定性,Flutter的未来趋势怎么样等等这类问题相信你心中有了自己的答案。