百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

谷歌移动应用程序开发跨平台框架“Flutter”

ccwgpt 2024-09-15 14:55 29 浏览 0 评论

Flutter 背景

谷歌给Flutter的定义:Flutter是面向iOS和Android应用,提供一套基础代码的高性能高可靠软件开发工具包,使开发者能够在iOS和Android两个最主要的移动平台上,打造统一代码的高性能应用

概念

Flutter是谷歌的移动UI框架,可以在iOS和Android上构建高质量的原生用户界面,可以将其理解为是一款移动应用程序SDK,包含框架、控件和一些工具;它使用的是 Google 自己开发的网络编程语言——Dart 语言,因此,开发者只要使用过 Java 或 JavaScript 之类的语言,那么 Flutter 也极易上手

Flutter 目标

Flutter 是一个跨平台(Android 和 iOS)的移动开发框架,使用的是 Dart)语言。和 React Native 不同的是,Flutter 框架并不是一个严格意义上的原生应用开发框架

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

Flutter 特征

Flutter是一个移动应用程序的软件开发工具包(SDK),具有以下特征:

● 跨平台应用的框架,没有使用WebView或者系统平台自带的控件,使用自身的高性能渲染引擎自绘

● 简化版的浏览器,最大限度在android和ios上统一UI,包括业务逻辑和用户体验

● 开发语言使用dart,结合C, C++, 和Skia(2D渲染引擎)构建

● 支持hot reload,包含着完整的控件和工具链

一切皆控件,控件是每个Flutter应用程序的基本构建块,与分离视图、控制器、布局和其他属性的框架不同,Flutter具有一致的统一对象模型:控件;一个控件可以定义:结构元素(比如按钮或菜单)、风格元素(比如字体或颜色方案)、布局的方面(比如填充)、一些业务逻辑等

● 组合大于继承,控件本身通常由许多小型、单用途的控件组成,结合起来产生强大的效果,类的层次结构是扁平的,以最大化可能的组合数量

● 强化版的WebView,框架仅提供一个View层,大部分功能要依赖原生

● 目前只能够运行大部分Dart代码(不能引入dart:mirrors或dart:html库)

Flutter体系架构

Flutter被设计成一个可扩展,分层的系统,它包含了一系列依赖其下层的独立库;其示意图见下图:

其中,framework层中的每一个组件均是可选的和可以代替的,从上图可知,Flutter系统总共可以分为三层;上层的框架(Framework),中层的引擎(Engine),以及底层的嵌入层(Embedder)

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

● 引擎(Engine):引擎层绝大部分是用C++实现的,其为Flutter系统的核心。引擎提供了一系列Flutter核心API的底层实现,例如图形(通过Skia),文字布局,文件等,是连接框架和系统(Andoird/iOS)的桥梁

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

其中,Framework是我们这一系列文章主要关注的部分,从下到上,其主要包括:

● 基础模块(foundational)及基础服务,例如animation,painting,以及gestures,这三种基础服务是为了方便上层调用对基础模块的抽象

● Rendering 层,为处理图层提供了抽象组件;’通过这一层,你能构建一棵可绘制对象的树;你可以动态操作这些对象,这棵树可以根据你的修改自动更新这棵树

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

● Material和Cupertino库提供了一系列Material和iOS设计风格的组件

整体架构

Flutter可以理解为开发SDK或者工具包,其通过Dart作为开发语言,并且提供Material和Cupertino两套视觉控件,视图或其他和视图相关的类,都以Widget的形式表现。Flutter有自己的渲染引擎,并不依赖原生平台的渲染;Flutter还包含一个用C++实现的Engine,渲染也是包含在其中的

Flutter 的核心原则

Flutter 包含了一个函数响应式框架( functional-reactive framework)、一个 2D 渲染引擎、直接可用的 Widget 库、和各种开发工具;这些组件在一起配合使用,来帮助你设计、开发、测试和调试 应用;这些功能都围绕几个核心的原则来实现的

跨平台方案对比

Widget

在Flutter中将显示以及和显示相关的部分,都统一定义为widget,下面列举一些widget包含的类型:

● 用于显示的视图,例如ListView、Text、Container等

● 用来操作视图,例如Transform等动画相关

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

在Flutter中,所有的视图都是由Widget组成,Label、AppBar、ViewController等;在Flutter的设计中,组合的优先级要大于继承,整体视图类结构继承层级很浅但单层很多类;如果想定制或封装一些控件,也应该以组合为主,而不是继承

在iOS开发中,我也经常采用这种设计方案,组合大于继承。因为如果继承层级过多的话,一个是不便于阅读代码,还有就是不好维护代码。例如底层需要改一个通用的样式,但这个类的继承层级比较复杂,这样改动的话影响范围就比较大,会将一些不需要改的也改掉,这时候就会发现继承很鸡肋

但在iOS中有Category的概念,这也是一种组合的方式,可以通过将一些公共的东西放在Category中,使继承的方便性和组合的灵活性达到一个平衡

Flutter中并没有单独的布局文件,例如iOS的XIB这种,代码都在Widget中定义;和UIView的区别在于,Widget只是负责描述视图,并不参与视图的渲染;UIView也是负责描述视图,而UIView的layer则负责渲染操作,这是二者的区别

结语

技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面

Android 架构师之路还很漫长,与君共勉

PS:有问题欢迎指正,可以在评论区留下你的建议和感受;

欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下

相关推荐

NET版本众多,傻傻分不清楚

面对.NET众多的版本,尤其还有几个名称的情况下,相信很多初学C#的开发人员都很困惑,搞不清究竟该怎么选择。下面就列举一下.NET的主要版本及其区别:.NETFramework(传统版本,仅适用于W...

.NET Framework 和 .NET Core 有啥区别?如何选择?

.NETFramework和.NETCore都是由Microsoft开发的软件框架,用于创建Windows应用程序和Web应用程序。它们的主要区别在于:支持的操作系统:.NET...

「分享」介绍一款倍受欢迎的.NET 开源UI库

概述今天要带大家了解的是一款WPF的开源控件库MahApps.Metro。MahApps.Metro是用于创建现代WPF应用程序的工具包,它许多开箱即用的好东西。目前支持的NETFramework...

.NET 5.0正式版发布:应用可在ARM64上原生运行

更多:o梵蒂冈图书馆频繁遭黑客攻击oNPM包被发现窃取敏感的Discord和浏览器文件o作者:硬核老王o(本文字数:712,阅读时长大约:1分钟).NET5.0正式版发布:应用可...

盘点8个热门.Net开源项目

一、SmartFormat:轻量级文本模板库,轻松替代string.Format项目地址:https://github.com/axuno/SmartFormatSmartFormat不仅继承了s...

.NET与Java开发:一场从框架到应用实例的深度对决

在软件开发这片广袤的战场上,.NET与Java两大开发平台如同两位身经百战的将军,各自率领着庞大的开发者队伍,在不同的应用场景中大放异彩。今天,我们就来一场从框架到应用实例的深度对决,看看这两大平台究...

TouchSocket:一个功能强大且易于使用的 .NET 网络通信框架

项目介绍TouchSocket是一个功能强大且易于使用的.NET网络通信框架,适用于C#、VB.Net和F#等语言。它提供了多种通信模块,包括TCP、UDP、SSL、WebSocket、Mo...

远离报错烦恼!深入全面掌握.NET Framework

由于Windows系统对.NETFramework这一系统组件有着极为特殊的要求,而部分应用软件及游戏对其的依赖性也近乎达到了驱动级的水准,使用或安装不当会遭遇许多“未知”的问题,因此如何掌握.NE...

想自己搭建.Net Web框架,开源项目太庞大看不懂,可以看这个教程

大家好,我是编程乐趣。一直以来,我都在运营知识星球,这个月也开始全职专心编写教程了。当时编写教程,就是发现很多程序员工作多年了,都没自己搭建过框架,也没接触过公司的框架底层代码。这就导致一些问题,无法...

.NET 8 + React 18 一体化开发框架!苏州码农十年匠心打磨

开篇前言从2014年入行至今,从WebForms到MVC,从JavaScript到React/Vue,从.NETFramework到.NETCore/8,技术栈的变迁伴随了我整个职业生涯。去年,我...

.Net Framework详解

相信有不少小伙伴遇到过这种情况:安装软件时提示.NetFramework未安装导致软件无法打开,或者需要安装.NetFramework4.0以上的组件。那.NetFramework是什么呢?....

系统小技巧:深入全面掌握.NET Framework

由于Windows系统对.NETFramework这一系统组件有着极为特殊的要求,而部分应用软件及游戏对其的依赖性也近乎达到了驱动级的水准,使用或安装不当会遭遇许多“未知”的问题,因此如何掌握.NE...

前端架构师成长之路:如何在 Vue 的计算属性中传递参数

在Vue中,计算属性(computed)是从其他响应式属性派生的属性,是用于自动监听响应式属性的变化,从而动态计算返回值。计算属性(computed)通常是一个没有参数的函数。当然如果需要像调...

Vue2 vs Vue3:核心差异与升级指南

Vue3自2020年发布以来,凭借其革命性的改进迅速成为开发者关注的焦点。本文将从架构设计、API模式、性能优化等多个维度深入对比Vue2和Vue3的核心差异,并提供代码示例帮助开发者...

突发!Vue3 投屏神器引爆程序员朋友圈

【AlarmLevel】重要【AlarmTitle】突发!Vue3投屏神器引爆程序员朋友圈【AlarmOverview】最近GitHub上名为vue-screen-share的仓库突...

取消回复欢迎 发表评论: