Flutter - 1.简介

Flutter 是 Google 开源的跨平台移动开发框架。 用一套代码为 iOS 和 Android 构建高性能,美观的应用程序。它也是 Google 即将推出的 Fuchsia 操做系统的开发平台。此外,它的架构能够经过定制的 Flutter 引擎将其引入其余平台。web

Flutter 特色

Flutter 试图使移动开发更友好, 它为开发人员提供应用程序框架和可移植的运行时引擎。该框架创建在 Skia 图形库上,提供实际呈现的部件,而不只仅是原生控件的包装。后端

Flutter 作跨平台开发可以像 web 同样灵活,但同时提供流畅的性能。Flutter 附带的部件库以及开源部件使其成为一个功能丰富的平台。简单地说,Flutter 是最接近移动开发人员用于跨平台开发的理想平台,灵活性、性能几乎毫无妥协。架构

Dart

Flutter 使用谷歌开发的 Dart 语言进行开发。 Google给出了选择Dart开发Flutter的理由:框架

  1. Dart运行时和编译器支持Flutter的两个关键特性的组合:
  • 基于JIT的快速开发周期:容许使用类型的语言进行形状更改和有状态的热重载;
  • 以及AOT编译器,可生成高效的ARM代码,能够快速启动并拥有可预测的生产部署性能。
  1. 开发人员的效率。Flutter的主要价值主张之一是经过让开发人员使用相同的代码库为iOS和Android建立应用程序,从而节省了工程资源。使用高效的语言能够进一步加速开发周期,并使Flutter更具吸引力。这对咱们的framework团队和开发人员都很是重要。大部分Flutter功能都是用Dart实现,所以咱们须要在10万行代码时能保持高效的而不会牺牲framework和widget的可读性。
  2. 面向对象。虽然咱们可使用非面向对象的语言,但这意味着要从新解决几个难题。另外,绝大多数开发人员都具备面向对象开发的经验,所以更容易学习如何使用Flutter进行开发。
  3. 可预测,高性能。借助Flutter,咱们但愿使开发人员可以快速建立流畅的用户体验。为了实现这一点,咱们须要可以在每一个动画帧中运行大量的代码。这意味着咱们须要一种既能提供高性能又能提供可预测性能的语言,而不会出现会致使丢帧的周期性暂停。
  4. 快速内存分配。Flutter框架使用函数式流,它很大程度上依赖于底层的内存分配器,从而有效地处理小的、短时间的内存分配会很是重要,因此在缺少此功能的语言中Flutter没法有效地工做。

Flutter 时间表

  • 2015 年 4 月,Flutter(最初代号 Sky)在 Dart Developer Summit 上展现
  • 2015 年 11 月,Sky 重命名为 Flutter
  • 2018 年 2 月,在 2018 年移动世界大会上 Flutter beta 1 官宣
  • 2018 年 4 月,Flutter beta 2 官宣
  • 2018 年 5 月,在 Google I / O 上 Flutter beta 3 官宣。2018 年 6 月,Flutter 预览版1发布
  • 2018 年 9 月,Flutter 预览版2发布
  • 2018 年 12 月,Flutter 正式版1.0发布

Flutter

Flutter 分为 Framework和 Engine,咱们是基于运行在 Engine 上的Framework进行开发App。下面分别对各个模块进行介绍:函数

走进Flutter

Framework

Material

Flutter提供了一套丰富的Material widget,可帮助您构建遵循Material Design的应用程序。布局

Cupertino

Flutter也提供了一套丰富的Cupertino(iOS)风格的widget性能

Widgets

Flutter Widget采用现代响应式框架构建,听说是从 React 中得到的灵感。widget的主要工做是实现一个build函数,用以构建自身。一个widget一般由一些较低级别widget组成。Flutter框架将依次构建这些widget,直到构建到最底层的子widget时,这些最低层的widget一般为RenderObject,它会计算并描述widget的几何形状。学习

Rendering动画

Flutter Widgets库使用RenderObject层次结构来实现其布局和绘制后端。 能够在应用程序中使用自定义RenderBox类来处理特定效果。但大多数状况下,都只是使用RenderObject层次调试布局问题。ui

若是直接在Rendering库上开发本身的库或应用程序,须要进行绑定(BindingBase)。默认的Widgets已经有Flutter完成绑定。 也可使用RenderingFlutterBinding,建立本身的绑定。至少须要导入ServicesBinding,GestureBinding,SchedulerBinding,PaintingBinding和RendererBinding。

Animation

Flutter 动画库,提供两种动画类型tween和physics-based。

  1. Tween动画“介于二者之间”的简称。在Tween中,定义了开始点和结束点、时间线以及定义转换时间和速度的曲线。而后由框架计算如何从开始点过渡到结束点。
  2. physics-based动画在physics-based动画中,运动被模拟为与真实世界类似的行为。例如,当你掷球时,它在何处落地,取决于抛球速度有多快、球有多重、距离地面有多远。 相似地,将链接在弹簧上的球落下(并弹起)与链接到绳子上的球放下的方式也是不一样。

Painting

该库包含Flutter引擎的绘制API,用于更专业的目的,例如绘制缩放图像,在阴影之间插值,在框周围绘制边框等。

Gestures

Gesture提供了手势识别相关的功能,包括触摸事件类定义和多种内置的手势识别器。

Engine

Flutter 引擎所有使用C++实现,提供Dart运行时和文字排版引擎(libtxt)和绘图引擎Skia。SKia是一个 2D的绘图引擎库,能够直接将数据经过OpenGL或者 Vulkan,传给GPU进行绘制。Chrome和 Android均采用 Skia做为绘图引擎。Skia提供了很是友好的 API,而且在图形转换、文字渲染、位图渲染方面都提供了友好、高效的表现。Skia是跨平台的,因此能够被嵌入到 Flutter的 iOS SDK中,而不用去研究 iOS闭源的 Core Graphics / Core Animation。

相关文章
相关标签/搜索