专栏首页李蔚蓬的专栏Flutter概述、原理 & 跨平台历史及各方案比较 & Dart概述

Flutter概述、原理 & 跨平台历史及各方案比较 & Dart概述

跨平台框架发展史

1.Android&IOS双端开发线开发周期较长, 为了尽快推出产品,减少开销、缩短开发周期、提高开发效率, 从而产生跨平台方案;

2.一开始:Web移动开发; 优势:入门门槛低,会前端即可; 缺点:没有原生流畅,性能比较差;

3.接着,webView; 原生和前端需要密切配合; 流行框架:dcloud、cordova、ionic

4.含有编译转换特性的跨平台框架 Weex、React Native、Flutter

Flutter概述

  • Google推出的一个跨平台的项目;
  • 最早起源于2015年;
  • 使用Dart语言;
  • 可以运行在Android、IOS以及其他设备上,得到接近原生的体验;
  • 是免费、开源的;

  • 是现代响应式框架 方便快捷、热重载(hotreload,不用重启工具即可看到编译效果,代码做了改变可以及时地看到)
  • 快速的2D渲染引擎 flutter不依赖于原生平台, 它有自己独立的渲染引擎, 通过可移植GPU加速渲染以及高性能本地arm代码运行时 达到跨设备、跨平台的高质量用户体验; Flutter有自己的Skia渲染引擎:

Application:Dart运用; Platform:Flutter渲染机制; ios、Android:渲染成ios、Android APP;

  • 开发调试工具 flutter视图预览、视图调试、Dart语言分析; web上调试Dart的工具;
  • 内置丰富的组件
  • 提供了 适用于Android的Material Design风格的组件 以及 适用于IOS的组件; 还可以在IOS上使用Material Design风格的组件, 在Android上使用cupertino的组件;
  • 自由组合组件风格;

Flutter架构

Flutter基本原理

  • Dart语言编写的框架层【Framework】, Material、Cupertino:两套风格组件; Widgets:组件; Rendering:渲染层; Animation、Painting、Gesture:动画、绘制、手势; Foundation:基础库;
  • 引擎层【Engine】(C++编写) Skia:图形渲染引擎库【最基本的核心部分】; Dart:Dart VM(虚拟机),用于编译和运行Dart代码; Text:文本渲染;

Dart

  • 由谷歌开发;
  • 简洁,强类型,面向对象;
  • 支持即时编译(Just-In-time,JIT)和 预编译(Ahead-of-time,AOT); JIT:支持真机、模拟器, 此模式下断点、调试工具都会打开, 安装包会很大,启动速度慢,可以通过热加载(hotreload)看到UI的更改; AOT:仅支持真机, 编译打包上线时用的模式, 将Dart语言文件编译成本地字节码文件, 去掉断点、调试工具,安装包会小很多;
  • 静态类型, 帮助我们在编译时捕获错误, 并在代码增长时管理代码;
  • 易于移植, Dart可编译成ARMX86代码, 移动端App可以在iOS、Android其他地方运行;
  • 响应式编程; UI响应式;

参考自CSDN课程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自定义View | 基础概述 & 自定义TextView实战 & 基于源码分析自定义View继承自ViewGroup时无法正常绘制的问题

    (f.bottom - f.top)/ 2 = View的一半高度(文字底部到View中线的距离) getHeight()是View的一半高度的位置的y坐...

    凌川江雪
  • OpenGL ES 3.0 | 统一变量和属性的概念与(在程序中的)获取流程、统一变量缓冲区对象详解、std140块规范、用 命名统一变量块 建立 统一变量缓冲区对象 的流程 和 相关API 和...

    程序示例, 说明如何用前面描述的命名统一变量块LightTransform【std140例程处】 建立一个统一变量缓冲区对象: 【思路: 块与自定义绑定...

    凌川江雪
  • 良心解析 | 搭建NDK环境历程及问题记录 暨 Android Studio 2.3.3 to 3.3 填坑之路(Update坑 + AVD坑 + NDK坑)

    (前言部分有点日记性质,对整个历程做了一个概况,如果你时间紧迫,可以跳过这部分直接看正文部分,正文部分分点分部分给出问题的描述和对应的解决方法)

    凌川江雪
  • 基于小程序技术栈的微信客户端跨平台实践

    本文主要内容整理自 GMTC 2019 分享《基于小程序技术栈的微信客户端跨平台实践》  https://gmtc2019.geekbang.org/pres...

    微信终端开发团队
  • VR+恐怖游戏,你的小心脏真的承受得住吗?

    VRPinea
  • RestTemplate的异常:Not enough variables available to expand

    原因:RestTemplate使用出错,我的情况是不知道这里要求用RestTemplate的使用格式,应该很多人都是这样吧?不过,看了下RestTemplate...

    ydymz
  • 使iPhone也可以拥有iPad的pop效果

    Raindew
  • 解决问题“Parsing Data for android-23 failed Unsupported major.minor version 51.0”

    我是在 Eclipse 里面把 Android 工程中 project.properties 配置文件的 target 配置从 android-15 改成了 a...

    LeoXu
  • Spring Boot升级到2.x,Jackson对Date时间类型序列化的变化差点让项目暴雷【享学Spring Boot】

    在阅读本文之前,建议你已经掌握了Jackson的知识以及它的Spring、Spring Boot下的集成和运用。

    YourBatman
  • 2016腾讯软件开发面试题之不定项选择题

    一、前言 2017年1月27日19:05:28,今天是年三十,首先祝大家新年快乐,之前对自己要求过,每星期一篇面试题的博客,虽然今天心里有一万个不愿意写,也还是...

    非著名程序员

扫码关注云+社区

领取腾讯云代金券