Fork me on GitHub

Flutter理解与环境配置

Flutter是什么

Flutter 由 Google 的工程师团队打造,用于创建高性能、跨平台的移动应用。Flutter 针对当下以及未来的移动设备进行优化,专注于 Android and iOS 低延迟的输入和高帧率。

Flutter 可以给开发者提供简单、高效的方式来构建和部署跨平台、高性能移动应用;给用户提供漂亮、快速、jitter-free 的 app 体验。

Beta1版本于2018年2月27日在2018 世界移动大会公布 ;Beta2版本2018年3月6日发布;1.0版本于2018年12月5日(北京时间)发布 .

Flutter 的主要组件:

  • 一个高度优化, mobile-first 2D 渲染引擎 (保护对 text 优秀的支持 )

  • 一个 functional-reactive 框架 (可选的,你也可以引入你自己的框架)

  • 一组 Material Design 部件 (可选的,你也可以引入你自己的部件)库 ,工具,和一个用于 Atom 的插件。

  • Flutter的开发语言是Dart

一个开源的 Flutter 应用实例:FlutterOSC

谷歌原话

 
总结:
  1.   Flutter是一个UI SDK(Software Development Kit) 
  2.   可以进行移动端(iOS、Android),Web端(Beta),桌面(technical preview),跨平台解决方案; 
  3.   移动端目前已经很多公司在用,Google、阿里、腾讯
  4.   特别是阿里的咸鱼团队,为Flutter做了非常多的贡献;
  5.   Flutter它是有一统大前端的野心的,并且它正在侵蚀iOS、Android这些原生开发;
 
Flutter的特点
 Google公司在国内做过很多宣讲,其中多次提到Flutter的几个特点:美观、快速、高效、开放。 
  •  美观:
 使用Flutter内置美丽的Material Design和Cupertino widget(什么是widget,不着急)、丰富的motion API、平滑而自然的
 滑动效果和平台感知,为您的用户带来全新体验。
  • 快速:
 Flutter 的 UI 渲染性能很好。在生产环境下,Flutter 将代码编译成机器码执行,并充分利用 GPU 的图形加速能力,因此使用
 Flutter 开发的移动应用即使在低配手机上也能实现每秒 60 帧的 UI 渲染速度。 
 Flutter 引擎使用 C++ 编写,包括高效的 Skia 2D 渲染引擎,Dart 运行时和文本渲染库。 
  • 高效:
 Hot Reload (热重载) ,在前端已经不是什么新鲜的东西,但在移动端之前一直是没有的
  • 开放:
 Flutter 是开放的,它是一个完全开源的项目。
 

RN(React Native)是什么

 React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 React 在原生移动应用平台的衍生产物,支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。
 
React Native使你能够在Javascript和React的基础上获得完全一致的开发体验,构建世界一流的原生APP。
React Native着力于提高多平台开发的开发效率 —— 仅需学习一次,编写任何平台。(Learn once, write anywhere)
Facebook已经在多项产品中使用了React Native,并且将持续地投入建设React Native。
React Native主要特性如下:
  • 原生的iOS组件
React Native主张“Learn once, write everywhere”而非其他跨平台工具一直宣扬的“Write once, run everywhere”。通过React Native,开发者可以使用UITabBar、UINavigationController等标准的iOS平台组件,让应用界面在其他平台上亦能保持始终如一的外观、风格。
  • 异步执行
JavaScript应用代码和原生平台之间所有的操作都采用异步执行模式,原生模块使用额外线程,开发者可以解码主线程图像、后台保存至磁盘、无须顾忌UI等诸多因素直接度量文本设计布局。
  • 触摸处理
React Native引入了一个类似于iOS上Responder Chain响应链事件处理机制的响应体系,并基于此为开发者提供了诸如TouchableHighlight等更高级的组件。
  • React Native的开发语言是React

移动端跨平台开发技术演进

现在主流的移动开发平台是Android和iOS,之前还有过windows phone,每个平台的开发技术都不太一样。大家都是针对每个平台开发应用。自然有人就会觉得这样效率低下,想进行跨平台开发。从最开始的Hybrid混合开发技术,到RN的桥接技术,到现在新兴的Flutter技术,跨平台开发技术一直在演进。

以往最早的Hybrid开发,主要依赖于WebView。但是WebView是一个很重的控件,很容易产生内存问题,而且复杂的UI在WebView上显示的性能不好。react-native技术抛开了WebView,利用JavaScriptCore来做桥接,将js调用转为native调用,只牺牲了小部分性能获取的跨平台开发,这是一大进步。所以现在react-native很流行的原因。

 

上图react-native框架原理

 

Flutter实现跨平台采用了更为彻底的方案。它既没有采用WebView也没有采用JavaScriptCore,而是自己实现了一台UI框架,然后直接系统更底层渲染系统上画UI。所以它采用的开发语言不是JS,而Dart。据称Dart语言可以编译成原生代码,直接跟原生通信。

上图是Flutter框架原理图

 

Flutter将UI组件和渲染器从平台移动到应用程序中,这使得它们可以自定义和可扩展。Flutter唯一要求系统提供的是canvas,以便定制的UI组件可以出现在设备的屏幕上,以及访问事件(触摸,定时器等)和服务(位置、相机等)。这是Flutter可以做到跨平台而且高效的关键。另外Flutter学习了RN的UI编程方式,引入了状态机,更新UI时只更新最小改变区域。

系统的UI框架可以取代,但是系统提供的一些服务是无法取代的。Flutter在跟系统service通信方式,采用的是一种类似插件式的方式,或者有点像远程过程调用RPC方式。这种方式据说也要比RN的桥接方式高效。

Flutter与RN异同

简单总结一下Flutter与RN的异同。

  • 都实现了移动开发跨平台
  • 界面的编写都很类型,采用响应式视图,维护了一个状态机,只更新改变的最小区域界面
  • 都支持热重载hot reload,开发调试非常方便
  • 调用系统的service仍然需要封装接口,仍然还是需要懂得native开发
  • RN采用JS语言开发,基于React,受众更多。Dart语言受众小
  • Flutter的UI框架性能貌似更高一些,但是直接丢弃了原生UI框架。而RN还是可以自己利用原生框架,两个各有好处。Flutter的兼容性高,RN可以利用原生已有的优秀UI
  • Flutter的第三方库还很少,RN发展的早,虽然也还不完善,但是比Flutter好
  • RN的界面布局更像网页布局,而Flutter的布局更像native布局
  • Flutter在跨平台这方面做得更彻底一些

Flutter、RN、原生对比

认知:

比较内容FlutterRN 
平台实现 通过Dart虚拟机编译成机器码 Virtual Dom映射到原生View,通过ART虚拟机编译成机器码  
绘制引擎 Skia JS V8+Skia/OpenGL ES  
使用语言 Dart React  
上手难度 一般  
框架程度 较重  
社区 丰富,谷歌力捧 活跃,FaceBook支持  
软件发布 支持热更新(暂未开放) 支持热更新  

 

1、包体积原生比较小,Flutter和RN不相上下(Ios系统需要引入Skia库,最终包体积Flutter会明显大于RN),由于Flutter和RN框架中需要一些C++依赖库,导致包体积比原生大了很多。
2、启动时间,Flutter(冷热启动时间)>RN=原生
3、内存占用,在高端手机上,flutter占用内存是大于RN的,但是低端手机Flutter的内存占用会低于RN,RN内存占用不稳定,页面刚生成的时候内存占用会高一点, 之后缓慢回落。
4、CPU占用,RN明显高于Flutter和原生,这会导致手机性能降低、耗电量增加、发热更厉害
5、主观感受,Flutter要比RN更加流畅,体验感更好,但是和原生仍有不小差距,不过Flutter还很年轻,官方宣称其性能会接近原生,甚至超过原生体验,随着Google不断的改进相信在不远的将来会实现这个可能。
 
 

学习Flutter操作系统选择

 学习阶段: Windows或者macOS(苹果操作系统)都是可以的
 开发阶段: 一般需要使用macOS,因为我们需要针对iOS进行调试,通常方便起见还是选择macOS
 疑问: 如果以后做Flutter开发没有macOS怎么办? 
 这个可以完全放心,使用Flutter开发的公司必然会给你配备macOS的(黑苹果或者Mac Mini) 
 

 安装Flutter SDK

 Flutter SDK下载地址: 
 https://flutter.dev/docs/development/tools/sdk/releases
 选择自己的操作系统和最新稳定的版本(Stable版本) 
 
 环境变量配置
 1、MacOS环境变量配置
  export FLUTTER_HOME=/Applications/flutter
  export PATH=$PATH:$FLUTTER_HOME/bin
  export PATH=$PATH:$FLUTTER_HOME/bin/cache/dart-sdk/bin
 2、Window环境变量配置 
   Windows环境变量修改:点击计算机图标 - 属性 - 高级系统设置 - 高级 - 环境变量
   找到Path,在其中添加Flutter SDK目录下bin目录以及Dart的目录
 
配置镜像:
 flutter项目会依赖一些东西,在国内下载这些依赖会有一些慢,所以我们可以将它们的安装源换成国内的(也就是设置国内的镜像) 
 1、macOS或者Linux操作系统,依然是编辑~/.bash_profile文件
  export PUB_HOSTED_URL=https://pub.flutter-io.cn
  export FLUTTER_STORAGE_BASE_URL= https://storage.flutter-io.cn
 2、Windows用户还是需要修改环境变量
  Windows环境变量修改:点击计算机图标 - 属性 - 高级系统设置 - 高级 - 环境变量
   新建 变量 PUB_HOSTED_URL,其值为https://pub.flutter-io.cn
   新建 变量 FLUTTER_STORAGE_BASE_URL, 其值为https://storage.flutter-io.cn

  

配置环境

1、配置iOS环境

如果想为Flutter配置iOS开发环境,需要在我们的电脑上安装一个Xcode(此部分Windows电脑忽略) 
 Xcode是苹果公司的iOS和macOS的IDE,进行过iOS开发的童鞋应该都非常熟悉
 如何安装Xcode呢?
 第一种方式:直接在App Store上搜索Xcode,找到安装即可 
 第二种方式:安装自己想要的Xcode的版本,需要手动去下载 
 https://developer.apple.com/download/more

2、配置Android环境

 如果想为Flutter配置Android开发环境,需要在我们的电脑上安装一个Android Studio
 Android Studio是基于IntelliJ IDEA的、Google 官方的 Android 应用集成开发环境 (IDE)。 
 Android Studio的下载
 官网地址:https://developer.android.com/studio/?utm_source=android-studio
 Android的环境配置
 打开Android Studio,会问我们是否要设置代理,这是因为下载Android SDK等在国内不好下载 
 创建Android模拟器

 

开发工具选择

官方推荐两个工具来开发Flutter:Android Studio 和 VSCode
1、VSCode
 VSCode的优缺点
 VSCode是最近非常非常流行的开发工具,并且非常好用!VSCode最近已经有取代WebStorm作为前端首选开发工具的趋势了 
 VSCode的优点:
 VSCode其实并不能称之为是一个IDE,它只是一个编辑器而已。
 所以它非常的轻量级,不会占用你非常大的内存消耗,而且启动速度等都非常快,对于电脑配置不是特别高的同学,肯定是一个非常好的
选择。 
 并且你可以在VSCode上安装各种各样的插件来满足自己的开发需求。 
 VSCode的缺点:
 很多Android Studio包括的方便操作没有,比如点击启动、热更新点击等;
 而且在某些情况下会出现一些问题; 
 比如之前我在使用的过程中,有时候热更新不及时常常看不到效果,必须重启; 
 比如某些情况下,没有代码提示不够灵敏;

2、Android Studio

 对于进行过Android开发或者使用过Webstorm、IDEA、PHPStorm等的同学,使用Android Studio肯定是没有任何问题的 
 Android Studio的优点:
 集成开发环境(IDE)不用多说,你需要的功能基本都有 
 而且上面说的VSCode存在的问题,在Android Studio中基本不会出现
 Android Studio的缺点:
 一个字:重
 无论是IDE本身,还是使用Android Studio启动项目,都会相对慢一些
 占据的计算机资源也很多,所以电脑配置较低是会出现卡顿
 使用须知:
 使用Android Studio开发Flutter我们需要安装两个插件:Flutter和Dart
 
 

 创建工程与调试

1、创建工程
//flutter工程创建
flutter create xxx

//插件开发-创建项目
flutter create --org com.test.testid --template=plugin --platforms=android,ios,windows,linux,macos,web -i objc -a java  test_project_engine

2、调试
1.  iOS调试:使用 XCode打开源码目录下的 /ios工程,编译并运行 Demo 工程即可。
 
2.  windows调试:(需要在Windows上进行,需要安装visual studio)
(1)启用windows支持:flutter config --enable-windows-desktop
(2)flutter run -d windows

 3. macOS调试
(1)启用macOS支持:flutter config --enable-macos-desktop
(2)执行 flutter run -d macos

4. android调试
  a. 执行 flutter run。
  b. 使用 Android Studio(3.5及以上的版本)打开源码工程,单击【运行】即可。

注:使用 Android Studio 都可选择相应平台设备运行

 

 

 

posted @ 2021-01-11 09:51  极度恐慌_JG  阅读(616)  评论(0编辑  收藏  举报