还对Flutter理解不透?看完这些迟早成为大佬~

2023-11-17

Flutter是什么

在这里插入图片描述

Flutter简介

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序,并且兼容滚动行为、排版、图标等方面的差异。

flutter的开发语言是Dart,如果您使用过Java或JavaScript之类的语言,则能够很快上手,甚至有一些Flutter应用是没有编程经验的人写的!在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。

跨平台自绘引擎

Flutter与其它大多数跨平台框架不同,因为Flutter既不使用WebView,也不使用操作系统的原生控件。相反,Flutter使用自己的高性能渲染引擎来绘制widget。这样不仅可以保证在Android和iOS上UI的一致性,而且也可以避免对原生控件依赖而带来的限制及高昂的维护成本。

Flutter使用Skia作为其2D渲染引擎,Skia是一个 2D的绘图引擎库,其前身是一个向量绘图软件,Chrome和 Android均采用 Skia作为绘图引擎。Skia提供了非常友好的 API,并且在图形转换、文字渲染、位图渲染方面都提供了友好、高效的表现。Skia是跨平台的,所以可以被嵌入到 Flutter的 iOS SDK中,而不用去研究 iOS闭源的 Core Graphics / Core Animation。

目前Flutter默认支持iOS、Android、Fuchsia(Google新的自研操作系统)三个移动平台。但Flutter亦可支持Web开发(Flutter for web)和PC开发,本书的示例和介绍主要是基于iOS和Android平台的,其它平台读者可以自行了解。

Flutter的优势

开发效率高毫秒级的热重载,修改后,您的应用界面会立即更新。使用丰富的、完全可定制的widget在几分钟内构建原生界面。

富有表现力和灵活的UI快速发布聚焦于原生体验的功能。分层的架构允许您完全自定义,从而实现难以置信的快速渲染和富有表现力、灵活的设计。

原生性能Flutter包含了许多核心的widget,如滚动、导航、图标和字体等,这些都可以在iOS和Android上达到原生应用一样的性能。
Flutter的开发语言

Flutter采用的是Dart作为开发框架和widget的语言。

为什么选择Dart语言?

Flutter在四个主要维度进行了评估,并考虑了框架作者、开发人员和最终用户的需求等因素。我们发现不同的语言在不同的层面符合一部分需求,但Dart在所有评估维度上得分都很高,并且符合我们的所有要求和标准。

Dart运行时和编译器支持Flutter的两个关键特性的组合:

基于JIT的快速开发周期:允许使用类型的语言进行形状更改和有状态的热重载;

AOT编译器,可生成高效的ARM代码,可以快速启动并拥有可预测的生产部署性能。

此外,flutter开发团队与Dart社区密切合作,Dart社区正在积极投入资源改进Dart在Flutter中的使用。例如,当我们采用Dart时,该语言没有提供生成原生二进制文件的工具链(这对于实现可预测的高性能是很有帮助的),但是现在实现了,因为Dart团队为Flutter构建了它。同样,DartVM之前已经针对吞吐量进行了优化,但团队现在正在优化VM的延迟时间,这对于Flutter的工作负载更为重要。

Dart在以下主要标准上得到高分:

开发人员的效率Flutter的主要价值主张之一是通过让开发人员使用相同的代码库为iOS和Android创建应用程序,从而节省了工程资源。使用高效的语言可以进一步加速开发周期,并使Flutter更具吸引力。这对我们的framework团队和开发人员都非常重要。大部分Flutter功能都是用Dart实现,因此我们需要在10万行代码时能保持高效的而不会牺牲framework和widget的可读性。

面向对象虽然我们可以使用非面向对象的语言,但这意味着要重新解决几个难题。另外,绝大多数开发人员都具有面向对象开发的经验,因此更容易学习如何使用Flutter进行开发。

可预测,高性。借助Flutter,我们希望使开发人员能够快速创建流畅的用户体验。为了实现这一点,我们需要能够在每个动画帧中运行大量的代码。这意味着我们需要一种既能提供高性能又能提供可预测性能的语言,而不会出现会导致丢帧的周期性暂停。

快速内存分配 Flutter框架使用函数式流,它很大程度上依赖于底层的内存分配器,从而有效地处理小的、短期的内存分配会非常重要,所以在缺乏此功能的语言中Flutter无法有效地工作。

1.1.2 Flutter框架结构

Flutter框架是一个分层的结构,每个层都建立在前一层之上。

这个设计的目标是帮助你用更少的代码做更多的事情。例如,Material层是通过组合来自Widget层的基本Widget来构建的, 并且Widgets层本身是通过较低级对象渲染层构建的。

层为构建应用程序提供了许多选项。选择一种自定义的方法来释放框架的全部表现力,或者使用构件层中的构建块,或混合搭配。您可以实现Flutter提供的所有现成的widget,或者使用Flutter团队用于构建框架的相同工具和技术创建您自己的定制widget。

没有什么是隐藏的。您可以从高层次,统一的widget概念中获得开发效率优势,而不会牺牲您希望深入到下层的能力。

Flutter框架分三层 Framework,Engine, Embedder

Flutter Framework

Framework使用dart语言实现,包括UI,文本,图片,按钮等Widgets,渲染,动画,手势等。此部分的核心代码是flutter仓库下的flutter package,以及sky_engine仓库下的 io, async, ui(dart:ui库提供了Flutter框架和引擎之间的接口)等package。

Flutter Engine

Engine使用C++实现,主要包括:Skia, Dart 和 Text。

Skia是开源的二维图形库,提供了适用于多种软硬件平台的通用API。其已作为Google Chrome,Chrome OS,Android, Mozilla Firefox, Firefox OS等其他众多产品的图形引擎,支持平台还包括Windows, macOS, iOS,Android,Ubuntu等。

Dart 部分主要包括:Dart Runtime,Garbage Collection(GC),如果是Debug模式的话,还包括JIT(Just In Time)支持。Release和Profile模式下,是AOT(Ahead Of Time)编译成了原生的arm代码,并不存在JIT部分。

Text 即文本渲染,其渲染层次如下:衍生自 Minikin的libtxt库(用于字体选择,分隔行);HartBuzz用于字形选择和成型;Skia作为渲染/GPU后端,在Android和Fuchsia上使用FreeType渲染,在iOS上使用CoreGraphics来渲染字体。
Embedder

Embedder是一个嵌入层,通过该层把Flutter嵌入到各个平台上去,Embedder的主要工作包括渲染Surface设置, 线程设置,以及插件等。平台(如iOS)只是提供一个画布,剩余的所有渲染相关的逻辑都在Flutter内部,这就使得它具有了很好的跨端一致性。

文章转载于:https://baijiahao.baidu.com/sid=1677058019872815848&wfr=spider&for=pc,如有侵权,请联系删除~

如何学习Flutter?

这份谷歌开源的《Flutter入门与实战》,希望可以帮助大家用最短时间学习Flutter。教程通俗易懂,实例丰富,既有基础知识,也有进阶技能,能够帮助读门者快速入进阶,快收藏起来!!!

第一章、Flutter基本功能

在这里插入图片描述

第二章、Flutter路由管理

在这里插入图片描述

第三章、Flutter网络请求插件Dio

在这里插入图片描述

第四章、Flutter状态管理

在这里插入图片描述

第五章、Flutter 动画

在这里插入图片描述

总结

现在很多Android开发岗位需要掌握Flutter,面对形势多变的就业环境,人人都希望多掌握一门技术,以致于不会被就业环境淘汰。

这份整理好的《Flutter入门与实战》资料,想要学习的朋友可以点击下方名片免费领取~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

还对Flutter理解不透?看完这些迟早成为大佬~ 的相关文章

  • android中向sqlite中插入大量数据

    目前 我必须一次向我的 Android 中插入超过 100 亿条数据 然而 内存不足的问题会使程序崩溃 sqlite 插入测试非常简单 只需使用 for 循环生成 sql 插入命令并通过 开始 和 提交 进行包装 private Array
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • 带有 EditText 和 Spinner 的对话框

    我有一个按钮 单击后会弹出一个对话框 我希望对话框有一个EditText and a Spinner对话框内 我不知道如何设置它的视图 我有一个代码AlertDialog它有效 只是EditText and Spinner我需要将其放入其中
  • Flutter:构造函数中 List 参数的默认分配

    在定义构造函数时 是否可以将常量值分配给数据类型 List 的可选参数 例如 class sample final int x final List
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 如何在颤动中从图像选择器中裁剪图像?

    我想允许用户裁剪他从图像选择器中选择的图像并保存它 类似于在 Whatsapp 上上传个人资料图片 我怎样才能在颤振中做到这一点 示例图片 您可以使用这2个flutter库来实现这一点 图像选择器 图像裁剪器 图像选择器使用iOS和Andr
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • Flutter 使用 RichText 填空

    我几乎完成了我的应用程序的填空实现 但不幸的是我不断遇到布局问题 然而 当我不断解决问题时 我几乎已经完成了 这是到目前为止的代码 RichText text TextSpan text dummy style TextStyle colo
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • AppLifeCycleState.detached 未被调用

    import package flutter material dart void main gt runApp MyApp class MyApp extends StatelessWidget override Widget build
  • Flutter 2.0 appbar 后退按钮如果包含 endDrawer 就会消失

    我刚刚将 flutter 更新到 2 0 我意识到如果 appbar 还包含 endDrawer 所有后退按钮都会消失 带有 endDrawer 的应用栏 https i stack imgur com X2jaf png 我试图摆脱 en
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef

随机推荐

  • conda更新软件包conda upgrade语句

    在虚拟环境中使用upgrade更新语句 例如更新tensorflow conda update tensorflow 要注意几个点 1 可能会更改相关的包的版本 它会检查该虚拟环境下conda环境中的包列表 并尝试更新其他的包来适应版本匹配
  • el-input系列(el-input、el-select等)palceholder 的样式设置

    el input系列所有带有palceholder的 修改palceholder的样式 为了避免样式污染 对placeholder先包一个父类 谷歌浏览器 父类 deep input webkit input placeholder col
  • 高等数学——驻点,拐点,极值点

    一 定义不同 1 极值点 若f a 是函数f x 的极大值或极小值 则a为函数f x 的极值点 极大值点与极小值点统称为极值点 极值点是函数图像的某段子区间内上极大值或者极小值点的横坐标 极值点出现在函数的驻点 导数为0的点 或不可导点处
  • 活体检测的几种手段分析

    人脸识别是判断你是否是你 而活体检测则为了确定人脸识别的你是不是活得你 基于这样的特性 活体检测可以有效的避免视频 图片的技术BUG 活体检测的手段比较多 目前比较通用的是人脸活体检测 但是实际应用中的还有指纹识别 虹膜识别 静脉识别 通过
  • 生成一个6位数的随机密码,且需要包括字符、数字、特殊符号

    实现思路 第一步 6位数的密码 且需要包括字符 数字 特殊符号这三个元素 将三个元素组成6位时每个元素的排列组合列举出来 第二步 从第一步的排列组合中随机抽取一个排列组合类型 i j k 第三步 从所有的字符 数字 特殊符号中随机抽取i个字
  • Zookeeper到底是干嘛的

    在Zookeeper的官网上有这么一句话 ZooKeeper is a centralized service for maintaining configuration information naming providing distr
  • 数据集笔记:杭州 & 上海 地铁客流数据

    数据集地址 PVCGN data at master liuwj2000 PVCGN github com 1 数据集介绍 从5 15到23 30的地铁乘客流量预测 使用前四个时间间隔 15分钟 x 4 60分钟 的地铁乘客流量 进 出流量
  • Python(1)--Python安装目录介绍

    DLLs Python 自己使用的动态库 Doc 自带的 Python 使用说明文档 include 包含共享目录都是 h的文件 Lib 库文件 放自定义模块和包 pip 安装下载的包会放这Lib site packages 这个路径可以修
  • 云原生微服务应用的平台工程实践

    作者 纳海 01 微服务应用云原生化 微服务是一个广泛使用的应用架构 而如何使得微服务应用云原生化却是近些年一直在演进的课题 国内外云厂商对云原生概念的诠释大同小异 基本都会遵循 CNCF 基金会的定义 云原生技术有利于各组织在公有云 私有
  • 形态学的图像处理

    数字形态学是图像处理与分析领域的重要工具之一 数学形态学可以用来解决抑制噪声 特征提取 边缘检测 图像分割 形状识别 纹理分析 图像恢复与重建 图像压缩等图像处理问题 本文将会对形态学的图像处理进行一些通俗的原理解释和Matlab代码验证
  • 初始C语言——数组的行和列互换

    define CRT SECURE NO WARNINGS 1 防止visual studio2013以上版本scanf报错 vc6 0环境可忽略 include
  • 小案例:页面滚动事件以及导航栏点击

    HTML html实现方法一 导航栏a标签href 要与下列div中id属性对应 点击a标签即可滑动到对应id的div div class navbar 导航栏 ul class rightheader li a class page sc
  • 5G承载网络技术发展趋势

    导读 随着5G建设的日渐加快 5G与云网融合共生互促 推动承载网络技术不断发展演进 云网融合必将成为行业高质量发展的必然趋势 当前云网融合面临着新需求与新挑战 5G承载网络技术在确定性保障 定制化服务和智能管控运维等技术方面也面临着新的发展
  • 5个最流行的可用于移动开发的嵌入式数据库简介

    嵌入式数据库是轻量级的 独立的库 没有服务器组件 无需管理 一个小的代码尺寸 以及有限的资源需求 目前有几种嵌入式数据库 你可以在移动应用程序中使用 让我们来看看这些最流行的数据库 数据库 数据类型存储 License 支持平台 Berke
  • 【2019.11.12】C语言中求最大值和最小值的两种方法

    C语言中求最大值和最小值的两种方法 编写完整的程序 输入三个数 输出其中的最大数 最小数 输入说明 两个整数N1 N2 N3 输出说明 最大数 最小数 输入样例 5 4 9 输出样例 9 4 方法一 include
  • C++学习教程大纲

    以下是C 学习教程的大纲 第一部分 基础知识 C 简介 什么是C C 的历史 C 的特点和优势 开发环境的搭建 安装C 编译器 配置开发环境 第一个C 程序 Hello World程序 程序的结构 编译和运行程序 数据类型和变量 基本数据类
  • jQuery的三种$()

    号是jQuery 类 的一个别称 构造了一个jQuery对象 所以 可以叫做jQuery的构造函数 个人观点 呵呵 1 可以是 expresion 即css选择器 Xpath或html元素 也就是通过上述表达式来匹配目标元素 比如 a 构造
  • 应急响应篇:windows入侵排查

    前言 应急响应 Incident Response Service IRS 是当企业系统遭受病毒传播 网络攻击 黑客入侵等安全事件导致信息业务中断 系统宕机 网络瘫痪 数据丢失 企业声誉受损 并对组织和业务运行产生直接或间接的负面影响时 急
  • 《码上行动:零基础学会Python编程》书籍分享

    Python是一种高级的 面向对象的编程语言 由Guido van Rossum于1991年开发 它具有简洁 易读和可维护的语法 被广泛用于科学计算 Web开发 数据分析 人工智能等领域 以下是Python的一些特点和优势 简洁易读 Pyt
  • 还对Flutter理解不透?看完这些迟早成为大佬~

    Flutter是什么 Flutter简介 Flutter是谷歌的移动UI框架 可以快速在iOS和Android上构建高质量的原生用户界面 一份代码可以同时生成iOS和Android两个高性能 高保真的应用程序 Flutter目标是使开发人员