Flutter调研(1)-Flutter基础知识
工作需要,因客户端有部分页面要使用flutter编写,需要QA了解一下flutter相关知识,因此,做了flutter调研,包含安装,基础知识与demo编写,第二部分是安装与环境配置。
——
Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能
想要更全面的了解Flutter,首先我们需要了解什么是跨平台框架
一、跨平台技术以及其他的跨平台框架
原生应用程序:指某一个移动平台(比如iOS或安卓)所特有的应用,使用相应平台支持的开发工具和语言,并直接调用系统提供的SDK API。
优点:可访问平台全部功能,如GPS、摄像头;性能高,可实现复杂动画,用户体验好。
缺点:动态化更新难度大,需要升级发版更新(或者hotfix);由于双平台,开发测试成本大。
针对原生开发这两个缺点,诞生了一些跨平台的动态化框架
目前主要有三类
- H5+原生(混合开发框架:Cordova、Ionic、微信小程序)
- JavaScript开发+原生渲染 (React Native、Weex、快应用)
- 自绘UI+原生(QT for mobile、Flutter)
1、H5+原生
也被称为hybrid开发,这类在各大app很常见,我们app当然也有使用
主要原理:将APP内的部分内容通过H5来实现,通过原生的网页加载控件WebView 来加载,由h5实现动态更新
H5代码是运行在WebView中,而WebView实质上就是一个浏览器内核,像位于一个权限受限的沙箱中,所以对于大多数系统能力没有访问权限,
混合框架一般都会在原生代码中预先实现一些访问系统能力的API, 然后暴露给WebView以供JavaScript调用。
缺点是性能不好,复杂用户界面或者动画实现上会困难
2、JavaScript开发+原生渲染
React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,RN使用Javascript语言
RN和React原理相通,并且Flutter也是受React启发,思想相通
React Native是原生控件渲染,所以性能会比混合应用中H5好很多,但是受限于js是脚本语言,执行效率有待提高,而且渲染依赖于原生控件,也依赖于系统更新,会受原生UI系统限制
3、自绘UI+原生
Flutter属于这种类型的跨平台框架,通过在不同平台实现一个统一接口的渲染引擎来绘制UI,而不依赖系统原生控件,所以可以做到不同平台UI的一致性。
自绘引擎解决的是UI的跨平台问题,如果涉及其它系统能力调用,依然要涉及原生开发
(我们测试时,可以注意下假如要调取原生的权限应用时的场景)
优点是性能高,灵活易维护;缺点是无法进行动态化更新,还是要升级更新
综上:
| 技术类型 | UI渲染方式 | 性能 | 开发效率 | 动态化 | 框架代表 |
|---|---|---|---|---|---|
| H5+原生 | WebView渲染 | 一般 | 高 | 支持 | Cordova、Ionic |
| JavaScript+原生渲染 | 原生控件渲染 | 好 | 中 | 支持 | RN、Weex |
| 自绘UI+原生 | 调用系统API渲染 | 好 | Flutter高, QT低 | 默认不支持 | QT、Flutter |
二、Flutter
总结上一节,Flutter的优点是
- 一套代码双平台运行,节约成本
- 热重载功能提高开发效率(后续会通过demo具体展示热重载)
- 采用自带的引擎进行渲染绘制,性能高

Flutter框架图
(核心只有一层轻量的C/C++代码。Flutter在Dart中实现了其它大部分系统(组合、手势、动画、框架、widget等), 开发人员可以轻松地进行读取、更改、替换或移除)
Flutter的一些基础知识
1、Flutter使用的开发语言:Dart
Dart是面向对象的语言,有垃圾回收机制,借鉴了Java和JavaScript,静态语法方面和Java非常相似,如类型定义、函数声明、泛型等,而在动态特性方面又和JavaScript很像,如函数式特性、异步支持等。
(具体在Dart语言里展开细说)
2、热重载(demo演示)
运行后更改代码,不要按“停止”按钮;,让应用继续运行;
调用 Save (cmd-s / ctrl-s),或者点击 热重载按钮 (带有闪电⚡️图标的按钮),此时查看设备已经即时更改为新代码
3、一切都是widget
在Android和iOS上,部件所对应的就是各种View类。
Flutter采用了不同的概念,部件不仅仅是结构化的元素。Flutter的部件架构更多地使用了组合,而不是继承,所以部件架构更加强大和灵活。Flutter官方文档写道:
在Flutter里,行为也是部件(如GestureDetector)。InheritedWidget可用于进行状态管理,AnimatedWidget可用于构建动画。
三、Dart单线程模型
在Java中,如果程序发生异常且没有被捕获,那么程序将会终止,但是这在Dart或JavaScript中则不会;
Java是多线程模型的编程语言,任意一个线程触发异常且该异常未被捕获时,就会导致整个进程退出。但Dart和JavaScript不会,它们都是单线程模型。
在Dart中,所有的外部事件任务都在事件队列中,如IO、计时器、点击、以及绘制事件等,而微任务通常来源于Dart内部,并且微任务非常少,之所以如此,是因为微任务队列优先级高,如果微任务太多,执行时间总和就越久,事件队列任务的延迟也就越久,对于GUI应用来说最直观的表现就是比较卡,所以必须得保证微任务队列不会太长。值得注意的是,我们可以通过Future.microtask(…)方法向微任务队列插入一个任务。
在事件循环中,当某个任务发生异常并没有被捕获时,程序并不会退出,而直接导致的结果是当前任务的后续代码就不会被执行了,也就是说一个任务中的异常是不会影响其它任务执行的。
四、State的生命周期
![]()
State初始化时会依次执行 : 构造函数 > initState > didChangeDependencies > Widget build , 此时页面加载完成
Flutter调研(1)-Flutter基础知识的更多相关文章
- 【flutter学习】基础知识(一)
今天开始学习一下flutter 学习思路:首先由一个简单的例子引出每次学习的对象,一点一点加入元素,针对于代码去了解学习详细知识. 看完本篇博客能够快速的读懂flutter简单代码. flutter ...
- Flutter调研(2)-Flutter从安装到运行成功的一些坑
工作需要,因客户端有部分页面要使用flutter编写,需要QA了解一下flutter相关知识,因此,做了flutter调研,包含安装,基础知识与demo编写,第二部分是安装与环境配置. —— 在mac ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- Html基础知识讲解
Html基础知识讲解 <title>淄博汉企</title> </head> <body bgcolor="#66FFCC" topmar ...
- Spring Cloud微服务实战阅读笔记(一) 基础知识
本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识 1:什么是微服务架构 是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...
- 为企业应用开发提速,写给企业IT部门的低代码开发基础知识
简介:应用程序开发长期以来一直是IT部门和业务部门面临的问题. IT部门总是被新的应用程序需求弄得不堪重负.他们不可能完成业务部门想要完成的每一个项目. 同时,业务部门的用户厌倦了等待,并开始完全绕过 ...
- golang+webgl实践激光雷达(一)激光扫描仪基础知识
一.前言 最近做一个测量料堆形状的项目,通过前期调研,最后决定用激光测距原理进行测量.通过旋转云台+激光扫描仪实现空间三维坐标的测量.其中激光扫描仪扫射的是一个二维的扫描面,再通过云台旋转,则形成一个 ...
- nodejs+gulp+webpack基础知识
nodejs+gulp+webpack基础知识 2019年08月22日 11:49:40 天府云创 阅读数 22 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文 ...
- flutter系列之:flutter架构什么的,看完这篇文章就全懂了
目录 简介 Flutter的架构图 embedder engine Flutter framework Widgets Widgets的可扩展性 Widgets的状态管理 渲染和布局 总结 简介 Fl ...
随机推荐
- G. Petya and Graph(经典项目与项目消耗问题)(网络流)
题:https://codeforces.com/contest/1082/problem/G 题意:给定有边权和点权的图,问你选一些边,然sum边-sum点最大(点权被多次用为公共点只会减一次) 分 ...
- 学习LCA( 最近公共祖先·二)
http://poj.org/problem?id=1986 离线找u,v之间的最小距离(理解推荐) #include<iostream> #include<cstring> ...
- Regex of Perl: ?= 指的是如果后面匹配到,则后面的内容不做替换,保留。 ab, s/a?=b/x/,变为xb,即后面匹配到b,b保留不做替换
Regex of Perl: ?= 指的是如果后面匹配到,则后面的内容不做替换,保留. ab, s/a?=b/x/,变为xb,即后面匹配到b,b保留不做替换
- 迅为iTOP-4418开发板编译Ubuntu
Ubuntu 系统比较特殊,源码就是它的镜像.Ubuntu 系统通过解压的方式进行烧写,我们也可以通过配置解压出来的 Ubuntu 系统源码文件夹,来配置 Ubuntu 系统.然后通过打包压缩的方式来 ...
- 吴裕雄--天生自然python机器学习:机器学习简介
除却一些无关紧要的情况,人们很难直接从原始数据本身获得所需信息.例如 ,对于垃圾邮 件的检测,侦测一个单词是否存在并没有太大的作用,然而当某几个特定单词同时出现时,再辅 以考察邮件长度及其他因素,人们 ...
- 吴裕雄--天生自然python学习笔记:python 用 Open CV抓取摄像头视频图像
Open CV 除了可以读取.显示静态图片外 , 还可 以加载及播放动态影片, 以 及 读取内置或外接摄像头的图像信息 . 很多笔记本电脑都具有摄像头 , OpenCV 可通过 VideoC aptu ...
- kubernets轻量 contain log 日志收集技巧
首先这里要收集的日志是容器的日志,而不是集群状态的日志 要完成的三个点,收集,监控,报警,收集是基础,监控和报警可以基于收集的日志来作,这篇主要实现收集 不想看字的可以直接看代码,一共没几行,尽量用调 ...
- scala编程(五)——基本类型和操作
文本 文本是直接在代码里写常量值的一种方式以.在Scala中并不显式的使用Int或float,而是以文本的方式写成 val 变量. 如果整数文本结束于 L 或者 l,就是 Long 类型,否则就是 I ...
- 常见字体图标库——font-awesome
1.简介 FontAwesome一种带有网页功能的象形文字语言,并收集在一个集合里.字库中有675个图标,只支持英文搜索,中文地址:http://www.fontawesome.com.cn/ 2.使 ...
- 管理Exchange Online用户介绍(一)
一.管理收件人 1.在“Office 365管理中心”主页,依次选择用户->添加用户 2.输入相关信息,其中包括名称.用户名.电子邮件地址等信息. 二.Exchange Online对用户邮箱的 ...