分享

浅谈Flutter入门知识

 码农9527 2021-04-16

  Flutter是Google的移动UI框架,可以在iOS和Android上快速构建高质量的本地用户界面。一个代码可以同时生成两个高性能、高保真的iOS和Android应用。Flutter的目标是让开发者在不同的平台上交付自然流畅的高性能应用,兼容滚动行为、排版、图标等方面的差异。Flutter的开发语言是Dart。如果你用过Java或JavaScript等语言,你可以很快上手,甚至有些Flutter应用是没有编程经验的人写的!世界上,Flutter被越来越多的开发者和组织使用,Flutter完全免费开源。

web

    跨平台自绘引擎

    Flutter不同于其他大多数跨平台框架,因为Flutter不使用网络或操作系统的本地控制。相反,Flutter使用自己的高性能渲染引擎绘制widget。这不仅可以保证安卓和iOS上用户界面的一致性,还可以避免依赖本地控制带来的限制和高昂的维护成本。

    使用Skia作为其2D渲染引擎的Flutter,Skia是一个2D绘图引擎库,它的前身是一个向量绘图软件,Chrome和Android都使用Skia作为绘图引擎。Skia提供了非常友好的API,并且在图形转换,文本渲染,位图渲染等方面都有友好高效的表现。Skia是跨平台的,因此可以嵌入到Flutter的iOSDK中,而不需要研究iOS闭源的CoreGraphics/CoreAnimation。

    现在Flutter默认支持iOS,Android,Fuchsia三个移动平台(Google新的自主开发操作系统)。但是Flutter也可以支持Web开发和PC开发,这本书的例子和介绍主要是基于iOS和Android平台,其他平台的读者可以自己了解。

    Flutter的优点

    开发高效毫秒级的热负荷。修改后,您的应用界面将立即更新。使用丰富可定制的widget在几分钟内构建本地界面。

    富有表现力和灵活的用户界面快速发布专注于本地体验的功能。分层结构允许您完全定制,从而实现难以置信的快速渲染和丰富的表现力和灵活的设计。

    本机性能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实现的,所以我们需要在100,000行代码时保持高效率,而不会牺牲framework和widget的可读性。

    虽然我们可以使用非面向对象的语言,但这意味着我们应该重新解决几个问题。此外,大多数开发者都有面向对象开发的经验,所以更容易学会如何使用Flutter进行开发。

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

    Flutter框架采用函数式流,它在很大程度上依赖于底层的内存分配器,因此有效地处理小的、短期的内存分配是非常重要的,因此Flutter不能在缺乏该功能的语言中有效地工作。

    Flutter框架结构

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

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

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

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

    Flutter框架分为三层Framework,Engine,Embedder。

    FlutterFramework

    Framework使用dart语言,包括UI、文字、图片、按钮等Widgets、渲染、动画、手势等。这部分的核心代码是flutter仓库下的flutterpackage,sky_engine仓库下的io,async,ui(dart:ui库提供Flutter框架和引擎之间的界面)等。

    FlutterEngine

    Engine使用C++实现,主要包括:Skia、Dart和Text。-Skia是一个开源的二维图形库,提供适合各种软硬件平台的通用API。作为GoogleChrome、ChromeOS、Android、MozillaFirefox、FirefoxOS等多种产品的图形引擎,支持平台,包括Windows、macOS、iOS、Android、Ubuntu等。-Dart部分主要包括:Dartruntime、GarbageCollection(GC),如果是Debug模式,也包括JIT(Justime)支持。在Release和Profile模式下,是AOTime编译成原生的arm代码,不存在于Debug模式,也不存在于后端。

    Embedder

    Embedder是通过这个层将Flutter嵌入到各个平台中的嵌入层,Embedder的主要工作包括渲染Surface设置、线程设置、插件等。该平台(例如iOS)只提供一个画布,其余的所有渲染相关逻辑都在Flutter中,从而使其具有良好的跨端一致性。

    总结

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

   如何学习Flutter?

    本节给你一些学习建议,分享作者在学习Flutter方面的一些经验,希望能帮你提高学习效率,避免不必要的坑。

    资源

    网站:阅读Flutter网站的资源是快速入门的最佳方式,同时网站也是了解Flutter最新发展动态的地方,由于Flutter目前仍处于快速发展阶段,因此建议读者还是不时地到网站查看是否有新动态。

    源代码和注释:源代码注释应该是学习Flutter的第一文档。FlutterSDK的源代码是开源的,注释非常详细。有很多例子。其实Flutter官方SDK文档是通过注释生成的。源代码和注释可以帮你解决大部分问题。

    Github:如果遇到的问题在StackOverflow上找不到答案,可以去githubflutter项目提issue。

    Gallery源代码:Gallery是Flutter官方示例APP,有丰富的示例,读者可以在线下载安装。Gallery的源代码在Flutter源代码examples目录下。

    社区

    StackOverflowkOverflow,那么StackOverflow就是目前世界上最大的程序员问答社区,而且现在也是Flutter问答社区。除了Flutter用户在StackOverflow上的交流外,Flutter开发团队的成员也经常在上面回答问题。

    博客:随着Flutter技术的普及,相信网上有很多与Flutter相关的文章和博客,读者可以阅读很多。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多