写在前面

如今,人们都希望自己手机里的应用又漂亮的设计,顺滑的动画以及优异的功能,为了做到这些,开发者们需要在不妥协质量和性能的前提下,更快速地推进新功能的研发,这就是Flutter的核心。

文章目录

  • 写在前面
  • Flutter是什么?
  • Flutter的安装
  • 示例代码
  • 框架结构

Flutter是什么?

  • Flutter介绍

Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。 Flutter 开源、免费,拥有宽松的开源协议,适合商业项目。Flutter已推出稳定的2.0版本。


Flutter的安装

安装环境

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

## 检测环境是否安装成功
$flutter doctor
## 开发工具
android studio
visual studio code

示例代码

我们就用最简单的Hello World!来给大家示例"

import 'package:flutter/material.dart';
void main() {runApp(new Center(child: new Text('Hello World!')));
}

在Dart2.0版本之后,可以省略new。

import 'package:flutter/material.dart';
void main() {runApp(Center(child: Text('Hello World!')));
}

在编写app时,通常会创建独立组件,是继承无状态的StatelessWidget还是有状态的StatefulWidget, 取决于您的组件是否需要管理状态。组件的主要工作是实现一个build函数,它使用其他低级别的组件来构建自己。Flutter框架将依次构建这些组件,最终会到达代表底层渲染对象的组件-RenderObject,它会计算并描述组件的几何形状。


框架结构

我们看一下 Flutter 官方提供的 Flutter 框架图,如图1-1所示:

简单来讲,Flutter 从上到下可以分为三层:框架层、引擎层和嵌入层,下面我们分别介绍:

1. 框架层

Flutter Framework,即框架层。这是一个纯 Dart实现的 SDK,它实现了一套基础库,自底向上,我们来简单介绍一下:

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

  • Rendering 层,即渲染层,这一层是一个抽象的布局层,它依赖于 Dart UI 层,渲染层会构建一棵由可渲染对象的组成的渲染树,当动态更新这些对象时,渲染树会找出变化的部分,然后更新渲染。渲染层可以说是Flutter 框架层中最核心的部分,它除了确定每个渲染对象的位置、大小之外还要进行坐标变换、绘制(调用底层 dart:ui )。

  • Widgets 层是 Flutter 提供的的一套基础组件库,在基础组件库之上,Flutter 还提供了 Material 和 Cupertino 两种视觉风格的组件库,它们分别实现了 Material 和 iOS 设计规范。

Flutter 框架相对较小,因为一些开发者可能会使用到的更高层级的功能已经被拆分到不同的软件包中,使用 Dart 和 Flutter 的核心库实现,其中包括平台插件,例如camera(opens new window)webview (opens new window),以及和平台无关的功能,例如 animations(opens new window)

我们进行Flutter 开发时,大多数时候都是和 Flutter Framework 打交道。

2. 引擎层

Engine,即引擎层。毫无疑问是 Flutter 的核心, 该层主要是 C++ 实现,其中包括了 Skia 引擎、Dart 运行时、文字排版引擎等。在代码调用 dart:ui库时,调用最终会走到引擎层,然后实现真正的绘制和显示。

3. 嵌入层

Embedder,即嵌入层。Flutter 最终渲染、交互是要依赖其所在平台的操作系统 API,嵌入层主要是将 Flutter 引擎 ”安装“ 到特定平台上。嵌入层采用了当前平台的语言编写,例如 Android 使用的是 Java 和 C++, iOS 和 macOS 使用的是 Objective-C 和 Objective-C++,Windows 和 Linux 使用的是 C++。 Flutter 代码可以通过嵌入层,以模块方式集成到现有的应用中,也可以作为应用的主体。Flutter 本身包含了各个常见平台的嵌入层,假如以后 Flutter 要支持新的平台,则需要针对该新的平台编写一个嵌入层。


Code For Better 谷歌开发者之声——Flutter - Google 开源的移动 UI 框架相关推荐

  1. 【CoderSay】Code For Better 谷歌开发者之声 - 相遇2022GoogleSummit

    Code For Better 谷歌开发者之声 - 相遇2022GoogleSummit 1. 前言(CoderSay) 2. 主旨演讲 3. 技术专场 3.1 Android 3.2Tensorfl ...

  2. Code For Better 谷歌开发者之声——Google 产品深度学习

    文章目录 前言 1.Google Maps 2.Google Earth 3.Android 4. Google Translate 前言 各位开发者朋友们大家好,很高兴能参加本次谷歌开发者之声活动. ...

  3. Code For Better 谷歌开发者之声——初识Web与谷歌,拉起兴趣之心。

    个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来. 本篇励志:程序是我的生命,但我相信爱她甚过爱我的生命. 目录 一.了解谷歌浏览器 1. 简介 2.优点 二.认识Web ...

  4. Code For Better 谷歌开发者之声----谷歌云基于TensorFlow高级机器学习

    目录 前言 一.End-to-End Machine Learning with TensorFlow on GCP(基于TensorFlow的机器学习) 1.什么是TensorFlow 2.Tens ...

  5. Code For Better 谷歌开发者之声——使用谷歌浏览器 Chrome 更好地调试

  6. Code For Better 谷歌开发者之声——使用 GPU 渲染模式分析工具进行分析

    图像查看 每个竖条都是一次VSync的时间16.6ms,如果竖条宽度变宽且透明则代表超出16.6ms绘制的帧 每个Vsync信号来临前都会做工作(Choreographer中的postFrameCal ...

  7. Code For Better 谷歌开发者之声—— 在 Windows 10 上对 Google Chrome 进行故障排除

  8. 谷歌开发者大会扔物线演讲原稿整理:Jetpack Compose

    大家好,我是扔物线朱凯.前两天,我在 GDG DevFest 2020 的 Android Day 做了一次面向全国 Android 工程师的技术分享直播,主题是 Android 最新的 UI 框架 ...

  9. 蓄势迎接 Google 谷歌开发者大会:开发者,你准备好了吗?

    技术发展日新月异,作为数字时代的构建者,开发者需要拥有敏锐的嗅觉与扎实的功底,以更好的立足于科技浪潮之上,谷歌一直致力于通过持续更新的学习资源,帮助开发者提升技能.高效开发.激发更多创意灵感. 去年, ...

  10. 谷歌开源的跨平台UI开发框架Flutter

    谷歌开源的跨平台UI开发框架Flutter Flutter是Google一个新的用于构建跨平台的手机App的SDK.写一份代码,在Android 和iOS平台上都可以运行.与React Native. ...

最新文章

  1. 李飞飞高徒Andrej Karpathy用AI撰写内心独白:我的“进化”之路
  2. 我是如何把VC6一直用到2016年的
  3. 让Apache支持Rewrite静态页面重写的方法
  4. VTK:PolyData之WarpSurface
  5. 阮一峰react demo代码研究的学习笔记 - demo4 debug - create element and Render
  6. android shape画边框,安卓用shape画圆角矩形边框
  7. oppo手机解锁_手机解锁新风尚,OPPO的光域屏幕指纹技术又是哪根儿葱
  8. Linux 信息的各种查询(系统发行版本、内核版本、系统位数)
  9. windows libwebsocket
  10. Windows Internet Explorer 7 正式发布
  11. Python读取 csv文件中文乱码处理
  12. 详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)
  13. wps+for+linux+字体大小,WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  14. 用Python做证券指数的三种策略分析
  15. Word设置默认粘贴格式,自动更改粘贴格式
  16. 多帧图像增强 matlab,MATLAB中图像增强技术的实现
  17. 论文解读:Detach and Adapt: Learning Cross-Domain Disentangled Deep Representation
  18. ASEMI肖特基二极管MBR10100FCT关键参数及选型要点
  19. testflight怎么做版本更新_TestFlight
  20. Git合并两个分支的步骤

热门文章

  1. Java中学生管理系统(对分数健康查询与修改)
  2. macOS调整分辨率与HiDPI
  3. 考研高等数学张宇30讲笔记——第一讲 高等数学预备知识
  4. mysql进销存表设计_数据库设计:数据库进销存管理系统(包含有仓库出库入库触发器)...
  5. 日历问题 —— C++
  6. 期权、期货及其他衍生品 Chapter14 维纳过程与伊藤引理
  7. coap协议详解 服务器,COAP协议解析和简单打包实现
  8. matlab二重积分有奇异点,用MATLAB计算某些区域上二重积分.pdf
  9. (1.6w字)浏览器灵魂之问,请问你能接得住几个?
  10. (软考)系统分析师——标准化知识