▼react
Flutter 是 Google 的移动应用 SDK,用于在极短期内在 Android 和 iOS 平台上建立高质量的原生体验。Flutter 能够和既有代码相容,世界各地的不少开发者和组织都在使用它,而且它是免费和开源的。面试
▼编程
对于应用的用户来讲,Flutter 可让他们体验到美观灵活的 UI。性能优化
对于开发者来讲,Flutter 下降了建立移动应用的门槛。它加速了移动应用的开发,下降了兼顾 Android 和 iOS 应用开发的成本和复杂性。网络
对于设计师而言,Flutter 能够确保精确地实现设计意图,而无需下降保真度或被迫进行妥协。在设计师的手里,Flutter 还能够做为一种高效的原型设计工具。架构
▼并发
Flutter 适用于但愿快速构建精美的移动应用,或者但愿用一套代码库覆盖更多用户的开发者。框架
Flutter 也适用于须要领导移动开发团队的开发管理人员。Flutter 可让开发管理人员打造一个统一的移动应用开发团队,以便更快地开发更多功能,同时将相同的功能部署到 Android 和 iOS 版本的应用中,并下降维护成本。less
虽然设计师群体不是 Flutter 最初的目标受众,但 Flutter 也适用于那些但愿将原始设计意图高保真地传递给全部移动用户的设计师。异步
说到底,若是您想要漂亮的应用,使人愉悦的动效和动画,以及富有个性和身份感的 UI,那您就是 Flutter 的目标用户。
▼
若是您熟悉面向对象概念 (类、方法、变量等) 和指令式编程概念 (循环、条件等) ,您会发现 Flutter 很容易上手。
不过须要强调的是,学习和使用 Flutter 无需具有移动领域的开发经验。
就咱们亲历过的例子来讲,编程经验并不丰富的人们同样能够学习并使用 Flutter 进行原型设计和应用开发。
▼
Flutter 针对在 Android 和 iOS 上运行的 2D 移动应用进行了优化。
若是您的应用强烈须要表达出品牌个性,Flutter 会很是适合。不过,即使您想要打造的应用看起来像是股票平台那样复杂,也可使用 Flutter 来构建。
Flutter 能够构建功能齐全的应用,包括使用摄像头、地理位置、网络、存储、第三方 SDK 等。
▼
Flutter 与大多数用来构建移动应用的工具不一样,由于它既不使用 WebView,也不使用设备附带的 OEM Widget,而是使用本身的高性能渲染引擎来绘制 Widget。
Flutter 与其它工具的不一样之处还在于,它只有一层简洁的 C/C++ 代码,在这之上,Flutter 使用 Dart (一种现代化的、简洁的面向对象语言) 实现其大部分系统功能 (布局、手势、动画、框架、Widget 等),这种语言使得开发者能够轻松地进行阅读、更改、替换或删除。
这些特性都为开发者提供了巨大的系统控制权限,同时显著下降了访问大多数系统功能的门槛。
▼
高度优化的针对移动应用的 2D 渲染引擎,更具有出色的文字支持功能、现代化的 react 风格框架、适用于 Android 和 iOS 的丰富 Widget、用于单元和集成测试的 API、用于链接系统和第三方 SDK 的互操做及插件 API、无界面 (headless) 测试运行器,用于在 Windows、Linux 和 Mac 上运行测试、命令行工具,用于建立、构建、测试和编译应用。
▼
能够经过插件的方式使用 Android Studio、IntelliJ IDEA 和 VS Code 进行 Flutter 开发。您也能够在命令行中使用 flutter 命令,并配合能编辑 Dart 语言的编辑器进行开发。
▼
是的,Flutter 自带了现代化的开发框架,灵感正是来自 React。Flutter 的框架旨在实现分层、可定制 (以及灵活的开发选项)。开发者能够选择仅使用框架的一部分,或是使用另外的框架。
▼
是的,Flutter 自带了一套高品质的 Material Design 和 Cupertino (iOS 风格) Widget、布局和主题。固然,这些 Widget 只是一个起点。Flutter 的设计目的就是,让您轻松建立本身的 Widget,或是定制现有的 Widget。
▼
是的,Flutter 和 Material 团队密切合做,彻底支持 Material Theming。
▼
是的,Flutter 提供用于编写单元和集成测试的 API。咱们使用本身的测试功能来测试咱们的 SDK,每次提交代码前咱们都会测量提交的测试覆盖率。
▼
RN 是使用JS代码调用系统的原生控件,最高支持 60fps。 Flutter 不使用系统的原生控件, Flutter 基于GPU渲染,因此确保了 高性能,最高支持120fps,甚至不输原生。 Flutter只须要维护一套UI 代码:Flutter 在IOS和Android 是一套 UI 风格组件,因此 Flutter 须要作不多适配,由于上层只有一套UI代码。RN是同一套代码在IOS和Android显示不一样的风格,须要适配维护两个代码库。 相同点: 和RN相似,基于组件开发Weight,一切皆组件。
▼
官方曾测量了一个最小的 Flutter 应用(不含 Material 组件,仅有一个 Center 控件,使用 flutter build apk 构建),并打包为 release 版本,大小约为 4.06 MB。该APP:核心引擎大约为 2.7MB(已压缩),框架和应用程序代码大约 820.6KB (已压缩),LICENSE 文件为 53.5KB(已压缩),必要的 Java 代码 (classes.dex) 为 61.8KB(已压缩),此外还有大约 450.4KB(已压缩)的 ICU 数据。
所以相对应用程序,Flutter的引擎并不大。
▼
能够,但目前专一于移动端优先。将来会支持 WIndows , Mac 和 Linux。
▼
和Android原生开发不一样,使用代码动态构建的UI会更灵活:
严格的标记系统难以表达和生成具备特定行为的widget。
“代码优先”更好地支持热重载和动态环境适应等功能。
▼
必须能够,有关如何在Flutter中使用JSON的教程,请参阅 JSON教程。
Flutter支持和原生混合开发么?能够在当前原生APP中嵌入Flutter么?
能够,目前能够在现有的Android或iOS应用中嵌入Flutter,可是当前可能不太完善。 这里是官方文档以供参考。
▼
Dart运行时和编译器支持Flutter的混合编译:
基于JIT的快速开发周期:容许使用类型的语言进行形状更改和有状态的热重载
基于AOT编译器,可生成高效的ARM代码,能够快速启动并拥有可预测的生产部署性能。
Dart由谷歌维护,Dart社区正在积极投入资源改进Dart在Flutter中的使用。
Dart语言效率高,这点最重要!!!,这对framework团队和开发人员都很是重要。由于大部分Flutter功能都是用Dart实现,所以咱们须要在10万行代码时能保持高效的而不会牺牲framework和widget的可读性。
Dart面向对象。绝大多数开发人员都具备面向对象开发的经验,所以更容易学习如何使用Flutter进行开发。
Dart可预测,高性能。 Flutter框架使用函数式流,它很大程度上依赖于底层的内 存分配器,从而有效地处理小的、短时间的内存分配会很是重要,因此在缺 乏此功能的语言中Flutter没法有效地工做。
▼
Flutter的不一样是由于它核心只有一层轻量的C/C++代码。Flutter在Dart中实现了其它大部分系统(组合、手势、动画、框架、widget等),开发人员能够轻松地进行读取、更改、替换或移除。这为开发人员提供了对系统的巨大可定制性。
▼
Flutter是一个多范式编程环境。 集合了过去十多年优秀的开发范式:
组合:Flutter使用的主要范例是使用小对象,而后将它们组合在一块儿以得到更复杂的对象。好比Weight之间的相互嵌套。
函数式编程:整个应用程序能够仅使用StatelessWidget来构建 ,这些函数本质上是描述参数如何映射到其余函数的函数。
事件驱动:用户交互由事件对象表示,这些事件对象被分派给注册了事件处理程序的回调。屏幕刷新也由相似的回调机制触发。
基于类的面向对象编程:框架的大部分API都是使用继承类来构建的。咱们使用一种方法来在基类中定义很是抽象的API,而后在子类中迭代地对它们进行定制化。
命令式编程:直接命令式编程一般与对象内部封装的状态配对,用于提供最直观的解决方案。
响应式编程:widget和元素树有时被描述为响应式的,由于在widget的构造函数中提供的新输入会当即做为widget的构建方法对较低级别widget的更改传播,并在较低widget中进行更改(例如,做为响应到用户输入)经过事件处理程序传播回widget树。
泛型:泛型检测可用于帮助开发人员及早发现编程错误。Flutter框架使用泛型编程来处理这个问题。
并发:Flutter大量使用异步API。例如,动画系统经过Future来完成动画完成时的通知。图像加载系统一样使用Future在加载完成时进行报告。
约束:Flutter中的布局系统使用弱形式的约束编程来肯定布局的几何形状。约束(例如,父控件将大小约束传给子控件)知足这些限制。经过使用这种技术,Flutter能够更加精准的控制布局。
最后送福利了,如今关注我而且加入群聊能够获取包含源码解析,自定义View,动画实现,架构分享等。 内容难度适中,篇幅精炼,天天只需花上十几分钟阅读便可。 你们能够跟我一块儿探讨,欢迎加群探讨,有flutter—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿~ 群号:661841852