Flutter移动开发系列教程-初识Flutter篇

Flutter移动开发系列教程! 原生开发与跨平台技术 原生开发 原生应用程序是指某一个移动平台(比如iOS或安卓)所特有的应用,使用相应平台支持的开发工具和语言,并直接调用系统提供的SDK API。比如Android原生应用就是指使用Java或Kotlin语言直接调用Android SDK开发的应用程序;而iOS原生应用就是指通过Objective-C或Swift语言直接调用iOS SDK开发的应用程序。原生开发有以下主要优... 阅读详情

 

Flutter简介

Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flutter还使用 Native引擎渲染视图,这无疑能为用户提供良好的体验。

跨平台自绘引擎

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

Flutter使用Skia作为其2D渲染引擎,Skia是Google的一个2D图形处理函数库,包含字型、坐标转换,以及点阵图都有高效能且简洁的表现,Skia是跨平台的,并提供了非常友好的API,目前Google Chrome浏览器和Android均采用Skia作为其绘图引擎,值得一提的是,由于Android系统已经内置了Skia,所以Flutter在打包APK(Android应用安装包)时,不需要再将Skia打入APK中,但iOS系统并未内置Skia,所以构建iPA时,也必须将Skia一起打包,这也是为什么Flutter APP的Android安装包比iOS安装包小的主要原因。

高性能

Flutter高性能主要靠两点来保证,首先,Flutter APP采用Dart语言开发。Dart在 JIT(即时编译)模式下,速度与 JavaScript基本持平。但是 Dart支持 AOT,当以 AOT模式运行时,JavaScript便远远追不上了。速度的提升对高帧率下的视图数据计算很有帮助。其次,Flutter使用自己的渲染引擎来绘制UI,布局数据等由Dart语言直接控制,所以在布局过程中不需要像RN那样要在JavaScript和Native之间通信,这在一些滑动和拖动的场景下具有明显优势,因为在滑动和拖动过程往往都会引起布局发生变化,所以JavaScript需要和Native之间不停的同步布局信息,这和在浏览器中要JavaScript频繁操作DOM所带来的问题是相同的,都会带来比较可观的性能开销。

采用Dart语言开发

这是一个很有意思,但也很有争议的问题,在了解Flutter为什么选择了 Dart而不是 JavaScript之前我们先来介绍两个概念:JIT和AOT。

目前,程序主要有两种运行方式:静态编译与动态解释。静态编译的程序在执行前全部被翻译为机器码,通常将这种类型称为AOT (Ahead of time)即 “提前编译”;而解释执行的则是一句一句边翻译边运行,通常将这种类型称为JIT(Just-in-time)即“即时编译”。AOT程序的典型代表是用C/C++开发的应用,它们必须在执行前编译成机器码,而JIT的代表则非常多,如JavaScript、python等,事实上,所有脚本语言都支持JIT模式。但需要注意的是JIT和AOT指的是程序运行方式,和编程语言并非强关联的,有些语言既可以以JIT方式运行也可以以AOT方式运行,如Java、Python,它们可以在第一次执行时编译成中间字节码、然后在之后执行时可以直接执行字节码,也许有人会说,中间字节码并非机器码,在程序执行时仍然需要动态将字节码转为机器码,是的,这没有错,不过通常我们区分是否为AOT的标准就是看代码在执行之前是否需要编译,只要需要编译,无论其编译产物是字节码还是机器码,都属于AOT。在此,读者不必纠结于概念,概念就是为了传达精神而发明的,只要读者能够理解其原理即可,得其神忘其形。

现在我们看看Flutter为什么选择Dart语言?笔者根据官方解释以及自己对Flutter的理解总结了以下几条(由于其它跨平台框架都将JavaScript作为其开发语言,所以主要将Dart和JavaScript做一个对比):

  1. 开发效率高

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

    基于JIT的快速开发周期:Flutter在开发阶段采用,采用JIT模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间;

    基于AOT的发布包: Flutter在发布时可以通过AOT生成高效的ARM代码以保证应用性能。而JavaScript则不具有这个能力。

  2. 高性能

    Flutter旨在提供流畅、高保真的的UI体验。为了实现这一点,Flutter中需要能够在每个动画帧中运行大量的代码。这意味着需要一种既能提供高性能的语言,而不会出现会丢帧的周期性暂停,而Dart支持AOT,在这一点上可以做的比JavaScript更好。

  3. 快速内存分配

    Flutter框架使用函数式流,它很大程度上依赖于底层的内存分配器,因此,能够有效地处理小的、短期的内存分配会非常重要,所以在缺乏此功能的语言中Flutter无法有效地工作;当然Chrome V8的JavaScript引擎在内存分配上也已经做的很好,事实上Dart开发团队很多成员都是来自Chrome团队的,所以在内存分配上Dart并不能作为超越JavaScript的优势,而对于Flutter来说,它需要这样的特性,而Dart也正好满足而已。

  4. 类型安全

    由于Dart是类型安全的语言,支持静态类型检测,可以在编译前发现一些类型错误,排除潜在问题。这一点对于前端开发者来说可能会更有说服力,由于JavaScript是一个弱类型语言,前端社区出现了很多给JavaScript代码添加静态类型检测的扩展语言和工具,如:Coffeescript、微软的TypeScript以及Facebook的Flow。相比之下,Dart本身支持静态类型,这是它的一个重要优势。

  5. Dart团队就在隔壁

    我竟无言以对,看似不应该作为理由的理由,仔细想来却是非常重要的理由。如此一来,Flutter团队可以获得更多、更方便的支持,正如Flutter官网所述“我们有机会与Dart社区密切合作,Dart社区正在积极投入资源改进Dart在Flutter中的使用。例如,当我们采用Dart时,该语言没有提供生成原生二进制文件的工具链(这对于实现可预测的高性能是很有帮助的),但是现在它实现了,因为Dart团队为Flutter构建了它。同样,Dart VM之前已经针对吞吐量进行了优化,但团队现在正在优化VM的延迟时间,这对于Flutter的工作负载更为重要。”

总结

本节主要介绍了一下Flutter的特点,如果你感到有些点还不是很好理解,不用着急,随着日后对Flutter细节的了解,再回过头来看,相信你会有更深的体会。

Flutter框架结构

本节我们先对Flutter的框架做一个整体介绍,旨在让读者心中有一个整体的印象,这对初学者来说非常重要,如果一下子便深入到Flutter中,就像一个在沙漠中没有地图的人,即使可以找到一个绿洲,但是他也不会知道下一个绿洲在哪,所以,无论学什么技术,都要现有一张清晰的“地图”,而我们的学习过程就是“按图索骥”,这样我们才不会陷于细节而“目无全牛”。言归正传,我们看一下Flutter官方提供的一张框架图:

image-20180816160424567

Flutter Framework

这是一个纯 Dart实现的 SDK,它实现了一套基础库,从低向上,我们来简单介绍一下:

  • 底下两层(Foundation和Animation、Painting、Gestures)在Google的一些视频中被合并为一个dart UI层,对应的是Flutter中的dart:ui包,它是Flutter引擎暴露的底层UI库,提供动画、手势及绘制能力。

  • Rendering层,这一层是一个抽象的布局层,它依赖于dart UI层,Rendering层会构建一个UI树,当UI树有变化时,会计算出变化部分,然后再更新UI树,最终将UI树绘制到屏幕上,这个类似于React中的虚拟DOM。Rendering层可以说是Flutter UI框架最核心的部分,它除了确定每个UI元素的位置、大小之外还要进行坐标变换、绘制(调用底层dart:ui)。

  • Widgets层是Flutter提供的的一套基础组件库,在基础组件库之上,Flutter还提供了 Material 和Cupertino两种视觉风格的组件库。而我们Flutter开发的大多数场景,只是和这两层打交道。

Flutter Engine

这是一个纯 C++实现的 SDK,其中包括了 Skia引擎、Dart运行时、文字排版引擎等。在代码调用 dart:ui库时,调用最终会走到Engine层,然后实现真正的绘制逻辑。

总结

Flutter框架本身有着良好的分层设计,本节旨在让读者对Flutter整体框架有个大概的印象,相信到现在为止,读者已经对Flutter有一个初始印象,在我们正式动手之前,我们还需要了解一下Flutter的开发语言Dart。

如何学习Flutter

本节给大家一些学习建议,分享一下笔者在学习Flutter中的一些心得,希望可以帮助你提高学习效率,避免不必要的坑。

资源

  • 官网:阅读Flutter官网的资源是快速入门的最佳方式,同时官网也是了解最新Flutter发展动态的地方,由于目前Flutter仍然处于快速发展阶段,所以建议读者还是时不时的去官网看看有没有新的动态。

  • 源码及注释:源码注释应作为学习Flutter的第一文档,Flutter SDK的源码是开源的,并且注释非常详细,也有很多示例,实际上,Flutter官方的SDK文档就是通过注释生成的。源码结合注释可以帮你解决大多数问题。

  • Github:如果遇到的问题在StackOverflow上也没有找到答案,可以去github flutter 项目下提issue。
  • Gallery源码:Gallery是Flutter官方示例APP,里面有丰富的示例,读者可以在网上下载安装。Gallery的源码在Flutter源码“examples”目录下。

社区

  • StackOverflow:如果你还没听过StackOverflow,这是目前全球最大的程序员问答社区,现在也是活跃度最高的Flutter问答社区。StackOverflow上面除了世界各地的Flutter使用者会在上面交流之外,Flutter开发团队的成员也经常会在上面回答问题。
  • 掘金:掘金的Flutter主页目前也收集了不少的博客文章,读者可以自行浏览。

总结

有了资料和社区后,对于我们学习者自身来说,最重要的还是要多动手、多实践,在本书后面的章节中,希望读者能够亲自动手写一下示例。准备好了吗,下一章中,我们将正式进入Flutter世界!

欢迎加入Android开发技术交流QQ群:150923287,本群可免费获取Flutter、Gradle、RxJava、小程序、Hybrid、移动架构、NDK、React Native、性能优化等技术教程!
 

Flutter移动开发系列教程-搭建Flutter开发环境 安装Flutter 工欲善其事必先利其器,本节首先会分别介绍一下在Windows和macOS下Flutter SDK的安装,然后再介绍一下配IDE和模拟器的使用。 搭建Flutter开发环境 由于Flutter会同时构建Android和IOS两个平台的发布包,所以Flutter同时依赖Android SDK和iOS SDK,在安装Flutter时也需要安装响应平台的构建工具和SDK。下面我们... 阅读详情

相关推荐

Flutter入门篇:初识Flutter,为什么说它是移动开发的未来

Flutter是Google开发的开源UI软件开发工具包,于2017年首次发布。它使用Dart语言作为开发语言,采用自绘引擎渲染UI,能够在多个平台上创建高性能、高保真的应用程序。Flutter不仅仅是一个跨平台开发框架,它代表着移动开发的未来趋势:🌈为什么Flutter是未来?🚀 性能优异:接近原生应用的流畅体验⚡ 开发高效:热重载让开发变得简单快乐🎨 UI精美:丰富的组件库和自定义能力🌍 真跨平台:一套代码,多端运行🔮 前景广阔:Google持续投入,生态日趋完善。

m0_65382359的博客 4542

如何在 Flutter 中使用 Google 的 Material 3 设计?

本篇文章将探讨如何在 Flutter 应用中使用 Material 3(Material You)设计。随着 Android 12 的推出,谷歌宣布了 Material 3。它为 UI 带来了一些令人耳目一新的变化,但动态颜色是亮点。它根据设备壁纸创建一组原色、二次色和三次色。这些颜色应用于 UI 和不同的应用程序,如时钟和日历。现在,让我们看看如何在 Flutter 应用程序中使用它。...

m0_56144365的博客 4335

Flutter入门教程:从零开始的Flutter开发指南

Flutter是由Google开发的一个开源UI框架,它使用Dart语言编写,并且可以用来快速构建跨平台移动应用程序,支持iOS和Android两大主流移动操作系统。Flutter的优势在于可以使用一套代码库同时开发iOS、Android和Web等不同平台的应用,同时具有较高的开发效率和灵活的定制能力。Flutter的界面是由各种Widget组成的,每个Widget负责界面的一部分。Flutter是一个强大的跨平台开发框架,支持从简单的UI到复杂应用的开发。

2301_77125316的博客 8998

一文带你轻松入门Flutter开发

Flutter 是谷歌推出的一款开源 UI 框架,旨在帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台等多种平台的开发。其核心优势在于跨平台特性和高性能表现。Flutter 的跨平台能力使其能够在 iOS 和 Android 等主流平台上运行,甚至通过第三方扩展还可支持 MacOS、Windows 以及谷歌的 Fuchsia 操作系统等,这极大地减少了开发成本,让开发者无需为不同平台编写大量重复代码,而是专注于业务逻辑和用户体验的优化。

2501_91093988的博客 1万+

Flutter系列——配置篇

众所周知,Flutter是谷歌推出来的,基于dart语言进行开发,可以实现跨平台,并且效果也是更加的贴近原生,相比市面上其他的跨平台方案它显得格外的独树一帜,比如RN、Weex等也可以做到跨平台,相对安卓开发者来说可能更倾向于Flutter吧,毕竟是谷歌推出的嘛,嘿嘿! 首先学习它要先配置环境,开发环境我这边采用Android Studio进行开发,当然你也可以选择别的,比如VS Code也是可...

weixin_43901866的博客 487

从Flutter开始聊聊跨平台移动开发框架

Flutter 是一款由 Google 开发的开源、跨平台移动端开发框架。Flutter 使用 Dart 作为开发语言,这是一门简洁、强类型的编程语言。它允许使用同一个代码库构建高性能、漂亮的 iOS 和 Android 应用,Flutter还提供了两套视觉库,可以针对不同的平台有不同的展示效果。此外,通过自定义的 Flutter 引擎可以将其嵌入到其他平台。 一直以来,跨平台工具采用以下两种方法之一: 在原生应用程序中嵌入 web view ,像构建网站一样构建应用程序。 封装原生平台里的.

Sara4820的博客 4467

Flutter完整开发实战详解(一、Dart语言和Flutter基础)

在如今的 Fultter 大潮下,本系列是让你看完会安心的文章。本系列将完整讲述:如何快速从0开发一个完整的 Flutter APP,配套高完成度 Flutter 开源项目。

大模型学习路线 5897

初识Flutter——在AS搭建环境及第一个Flutter APP

Flutter中文网 Windows: 打开gitbash,输入: git clone -b beta https://github.com/flutter/flutter.git export PUB_HOSTED_URL=https://pub.flutter-io.cn //国内用户需要设置 export FLUTTER_STORAGE_BASE_URL=https:...

诺冰羽的虚拟世界 6254

Flutter开发系列教程

flutter Developers Demo 不定期分享Flutter开发资讯与教程 文章地址https://github.com/flyou/flutter_demo 本人时间有限,并不能保证定期更新,但是不定期更新是肯定的。 能力有限,也不能保证写的都是对的,如有错误,请海涵指正。 文章全部手敲,不保证没有错别字,如有错别字请谅解,我不会改的。 目录 2018.01.01 Flutter是什...

flyou 3071

【Flutter 面试题】Flutter 是什么?它与其他移动开发框架有什么不同?

Flutter是一个强大的框架,适合那些追求高性能、一致体验和跨平台兼容性的项目。通过其丰富的组件、先进的Dart语言和灵活的架构,Flutter在移动和Web开发领域中提供了一个高效且先进的解决方案。

Code Metaverse 2973

使用Flutter开发移动应用的全面指南

在现代移动应用开发领域,跨平台解决方案已成为热门话题。作为Google推动的全新开源UI框架,Flutter凭借其强大的性能和快速的开发效率,正逐渐成为开发者的首选工具之一。本章将带您了解Flutter框架的基础知识、设计理念及其核心优势。Dart语言是由Google在2011年发布的一款面向对象的编程语言,最初是为了取代JavaScript,旨在优化Web应用的性能。它的设计目标是提供一种能够在服务器、浏览器和移动设备上快速运行的语言。

weixin_36064575的博客 913

开源项目教程:Flutter移动开发课程

开源项目教程:Flutter移动开发课程 1. 项目介绍 本项目Flutter移动开发课程是由Kleber de Oliveira Andrade教授在Americana技术学院的信息系统专业中讲授的移动应用程序开发课程内容。它旨在为学生提供一个学习如何使用Flutter框架进行移动应用开发的全面资源。项目包含了环境搭建指南、基础教程以及一些课程相关的实战演练,帮助初学者快速上手Flutter并理...

gitblog_00697的博客 1013

西门子S7-1200与汇川SV660P伺服速度模式实战:从接线到编程全流程

本文详细解析了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的集成实战。内容涵盖从硬件接线、伺服参数关键设置(如电子齿轮比)、博图软件组态到PLC编程的全流程,并提供了故障排查与性能优化指南,帮助工程师快速实现精准、稳定的运动控制。

weixin_29248313的博客 482

Flutter 系列二——移动开发技术简介

原生开发与跨平台技术 原生开发 原生应用程序是指某一个移动平台(比如iOS或安卓)所特有的应用,使用相应平台支持的开发工具和语言,并直接调用系统提供的SDK API。比如Android原生应用就是指使用Java或Kotlin语言直接调用Android SDK开发的应用程序;而iOS原生应用就是指通过Objective-C或Swift语言直接调用iOS SDK开发的应用程序。原生开发有以下主要优...

宝爷的专栏 1622

实战游戏项目管理1-规划篇

1、前言 做研发管理10多年,进游戏行业8年,经验下来项目管理就是一门技术,结合不同行业不同项目加以不同管理方法,但原理基本一样,这里总结下游戏项目的管理一些实操方法 一般游戏确定立项前都需要做,项目预研产出一个游戏Demo,通过公司的立项评审,这个过程的项目管理相对简单一般由制作人或其他项目经理兼任,只有控制好总体时间与成本就好,这里按立项后开始讲。 2、游戏项目规划 ...

pengdali的专栏 2万+

ASPICE1-配置管理

SUP.8配置管理 BP1:开发配置管理策略 BP2:识别配置项 BP3:建立配置项管理系统 BP4:建立分支管理 BP5:控制变更和发布 BP6: 建立基线 BP7:报告配置项状态 BP8:验证配置项信息 BP9:管理配置项和基线的存储 1.配置管理概念 配置管理(Configuration Management,CM)是通过使用技术或行政手段对软件产品进行控制,以实现对软件开发过程和生命周期进行控制、规范的一系列措施。 完整性、一致性、可控性。 2.配置管理的主要活动: 1.

HDZQ2005的专栏 3686

Flutter 基础系列篇

文章目录1、输出Hello World2、文本、容器3、远程图片、本地图片、实现圆形图片,实现圆角图片4、基础列表组件、 水平列表组件 、 图标组件5、列表、动态列表6、网格布局7、底部导航8、页面跳转、跳转传值(普通路由、普通路由传值)9、页面跳转、跳转传值(命名路由、命名路由传值)10、替换路由、返回到根路由11、自定义AppBar 定义顶部Tab切换、底部Tab结合顶部Tab实现类似头条页面布局 1、输出Hello World 1.1、 效果图 1.2、输出一句Hello World import

qq_27494201的博客 5485

IMU660RA姿态解算实战:从传感器滤波到欧拉角输出的完整实现

本文详细介绍了IMU660RA姿态解算的完整实现过程,从传感器滤波到欧拉角输出。通过实战案例和代码示例,展示了如何有效处理陀螺仪和加速度计的噪声问题,并选择合适的算法进行数据融合和姿态解算。特别强调了欧拉角输出中的坐标系对齐和动态补偿技巧,帮助工程师快速掌握IMU660RA的应用。

weixin_42524762的博客 386

关于Flutter的安装入门教程

和车神哥一起学,Flutter入坑简介及环境配置详解~

车手只需要车和手,压力来自轮胎 4214

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 466

玩转openclaw+企业微信

OpenClaw横空出世:AI从问答到执行的范式革命 OpenClaw作为2026年AI领域的重大突破,实现了从对话机器人到智能执行体的进化。其核心价值在于"自主执行"而非简单交互,通过六层解耦架构(表现层、网关层、运行时层、技能层、工具层、记忆层)构建完整执行闭环。关键技术包括Model Context Protocol实现多模型兼容,以及事件驱动架构确保实时响应。安装过程支持多平台,通过Node.js环境即可快速部署,并支持对接主流大模型。OpenClaw标志着AI开始真正&quot

西木风落 1591

Flutter篇 (一) 入门

很长的一段时间里,提到移动开发,首先想到的就是ios和android两大阵营,不过最近的一年多里面,发生了些可能会改变移动开发格局的事情,自从Google发布了Flutter1.0 开始 ,到前段时间的Flutter1.2版本 ,Flutter的热度从未消退,号称能同时完美运行在ios和android系统,甚至于Google未来的Fuchsia ,众所周知,android系统从发布时...

吃狗屎糖,走狗屎运... 1万+

文献综述三大痛点用AI轻松解决!借助Gemini 3 Pro搞定检索难、阅读慢、框架乱问题(附 AI 提示词)

4)“漏斗式”结构:先介绍宏观领域的研究现状,再缩小范围,聚焦于与你课题直接先关的子领域,深入探讨与你研究变量直接相关的文献, 指出前人没做过、没做全或结论有矛盾的地方,再顺势提出你的研究课题,这种结构逻辑最清晰,能直接引导读者发现你研究的必要性。想要有针对性的搜到相关文献,必须先把模糊的研究题目拆解成精准的检索语言,这个时候就需要建立一个关键词矩阵,如核心词、同义词、学术术语、上下位词,以及对应的英文表达。请围绕【我的研究主题/关键词】,检索近5年发表的高被引的中英文文献,优先选择顶刊综述/论文。

智能AI让学术科研更容易 277
上一篇: Flutter移动开发系列教程!
下一篇: Flutter移动开发系列教程-搭建Flutter开发环境
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值