Flutter是谷歌开发的一款跨平台移动应用程序开发框架。(google flutter优缺点)(flutter google)

访客 208 0

Flutter 背景

Flutter是谷歌开发的一款跨平台移动应用程序开发框架。(google flutter优缺点)(flutter google)-第1张图片-谷歌商店上架

谷歌对Flutter的定义是:Flutter是一款高性能、高可靠性的软件开发工具包,专为iOS和Android应用而设计。它提供了一套基础代码,使开发者能够在这两个主要移动平台上构建统一代码的高性能应用。

概念

Flutter是一款由谷歌开发的移动UI框架,可用于构建高质量的原生用户界面,适用于iOS和Android平台。它可以被视为一种移动应用程序SDK,包含了框架、控件以及其他工具。Flutter使用Google自家开发的Dart语言进行网络编程,因此对于已经熟悉Java或JavaScript等语言的开发者来说,上手Flutter也非常容易。

Flutter 目标

Flutter 是一种使用 Dart 语言开发的跨平台移动开发框架,可同时适用于 Android 和 iOS。与 React Native 不同的是,Flutter 框架并非严格意义上的原生应用开发框架。

Flutter的目标是创建具有高性能、高稳定性、高帧率和低延迟的Android和iOS应用。开发出来的应用在不同平台上与原生应用具有相同的体验,同时保留不同平台的原生特性,使其与整个系统更加协调一致。滚动操作、字体、图标等特殊特性也应该与该平台上其他应用保持一致,让用户感觉就像操作原生应用一样。举例来说,Android和iOS上返回图标是不一样的,并且滚动内容到底部时反馈也会有所差异。

Flutter 特征

Flutter是一款软件开发工具包(SDK),专为移动应用程序而设计,具备以下特点:

● 该跨平台应用框架采用自身高性能渲染引擎进行自绘,而非使用WebView或系统平台的默认控件。

我们将推出一款简化版浏览器,旨在在Android和iOS平台上实现最大程度的统一用户界面、业务逻辑和用户体验。

使用Dart开发语言,结合C、C++和Skia(2D渲染引擎),进行构建。

● 提供热重载功能,包含完整的控件和工具链。

在Flutter中,一切都是控件。控件是构建每个Flutter应用程序的基本单元。与其他框架不同,它将视图、控制器、布局和其他属性分离开来。Flutter采用了一致的统一对象模型,即控件。一个控件可以定义结构元素(如按钮或菜单)、风格元素(如字体或颜色方案)、布局方面的特性(如填充)以及一些业务逻辑等内容。

● 组合胜于继承,控件本身通常由多个小型、单一用途的控件组成,这些控件相互结合,产生出强大的效果。类的层次结构是扁平化设计的,以最大化可能的组合数量。

● 强化版的WebView框架仅提供一个视图层,而大部分功能则依赖于原生实现。

● 目前只能够运行大部分Dart代码(无法使用dart:mirrors或dart:html库)。

Flutter体系架构

Flutter被设计成一个可扩展,分层的系统,它包含了一系列依赖其下层的独立库;其示意图见下图:
Flutter是谷歌开发的一款跨平台移动应用程序开发框架。(google flutter优缺点)(flutter google)-第2张图片-谷歌商店上架
其中,framework层中的每一个组件均是可选的和可以代替的,从上图可知,Flutter系统总共可以分为三层;上层的框架(Framework),中层的引擎(Engine),以及底层的嵌入层(Embedder)

● 框架(Framework):框架层是纯dart语言实现的一个响应式框架,开发者平常需要通过该层和Flutter系统交互

● 引擎(Engine):引擎层主要采用C++语言实现,是Flutter系统的核心。引擎提供了一系列底层实现的Flutter核心API,包括图形渲染(使用Skia)、文字布局、文件操作等功能,它扮演着连接框架和操作系统(Android/iOS)之间的桥梁角色。

● 嵌入层(Embedder):嵌入层通常由平台对应的编程语言实现,例如在Android上使用Java和C++,在iOS上使用Objective-C/Objective-C++。嵌入层为Flutter系统提供了一个接口,通过该接口可以访问底层系统提供的服务,如输入法、绘制surface等。

我们主要关注的是Framework,它在我们这一系列文章中占据了重要地位。从下到上,它主要包括以下内容:

● Foundational modules and services, such as animation, painting, and gestures, are designed to provide convenient abstractions for higher-level usage of the basic modules.

● Rendering层为图层处理提供了抽象组件。通过这一层,您可以构建一个可绘制对象的树,并且能够动态地操作这些对象。这棵树会自动根据您的修改进行更新。

● Widgets层是组件的抽象,每个render对象都有对应的widget对象;此外,widgets层还允许您定义可重复使用的组合组件;同时,该层引入了响应式编程模型。

Material和Cupertino库为用户提供了一系列符合Material和iOS设计风格的组件选择。

整体架构

Flutter是一款强大的开发SDK或工具包,它使用Dart作为主要开发语言,并提供了Material和Cupertino两套精美的视觉控件。无论是视图还是与视图相关的其他类,都以Widget的形式呈现。不仅如此,Flutter还拥有自己独立的渲染引擎,不依赖于原生平台进行渲染。此外,Flutter还包含一个用C++实现的引擎,在其中完成了渲染过程。

Flutter 的核心原则

Flutter是一个综合性的开发框架,它包含了一个函数响应式框架、一个强大的2D渲染引擎,以及丰富多样的可用Widget库和各种实用开发工具。这些组件可以协同工作,帮助你高效地设计、开发、测试和调试应用程序。所有这些功能都是基于一些核心原则来实现的。

跨平台方案对比

Widget

Flutter是谷歌开发的一款跨平台移动应用程序开发框架。(google flutter优缺点)(flutter google)-第3张图片-谷歌商店上架
在Flutter中将显示以及和显示相关的部分,都统一定义为widget,下面列举一些widget包含的类型:

● 用于展示内容的视图,如ListView、Text、Container等

● 用于操控视图,如Transform等与动画相关的操作。

● 视图布局相关,例如Center、Expanded、Column等

在Flutter中,所有的视图都是由Widget组成。无论是Label、AppBar还是ViewController,它们都是Widget的一种表现形式。在Flutter的设计理念中,组合优先于继承。整体视图类结构层级较浅,但包含了许多单独的类。如果想要定制或封装一些控件,在Flutter中应该以组合为主而不是继承来实现。

在iOS开发中,我常常使用组合大于继承的设计方案。这是因为过多的继承层级不仅使代码难以阅读,而且也增加了代码的维护难度。举个例子,如果底层需要修改一个通用样式,但该类的继承层级较为复杂,那么修改将会影响到很多不需要改动的部分。这时候就会发现继承并不是一个很好的选择。

然而,在iOS中存在着Category的概念,这种概念可以被视为一种组合方式。通过将一些公共元素放置在Category中,可以实现继承的便利性和组合的灵活性之间的平衡。

在Flutter中,没有像iOS的XIB那样单独的布局文件。所有的代码都是在Widget中定义。与UIView不同的是,Widget只负责描述视图,而不参与视图的渲染。相比之下,UIView既负责描述视图,又有一个layer来执行渲染操作。这就是它们之间的区别。

结语

技术是永无止境的。作为一名技术人员,你需要对自己所编写的每一行代码和使用的每一个工具负责任。只有不断深入挖掘其底层原理,才能将自己的技术提升到更高的水平。

Android 架构师的道路依然漫长,让我们共同努力。

附注:如有任何问题,请随时指正。欢迎在评论区留下您的建议和感受;

欢迎大家给予点赞和评论,如果您觉得内容不错的话,也可以转发分享一下

标签: 谷歌商店上架 是谷歌 框架

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~