Flutter 是一款移动应用程序 SDK ,一份代码可以同时生成 iOS 和 Android 两个高性能、高保真的应用程序
Flutter 目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序;我们兼容滚动行为、排版、图标等方面的差异
这是一个来自Gallery的演示应用程序, 您可以在安装Flutter并设置好环境后运行Flutter示例应用程序;“Shrine”示例拥有高质量的滚动图片、互动卡片、按钮、下拉列表和购物车页面
无需移动开发经验即可开始使用;应用程序是用Dart语言编写的,如果您使用过Java或JavaScript之类的语言,则该应用程序看起来很熟悉; 使用面向对象语言的经验绝对有帮助,但一些Flutter应用程序甚至是没有编程经验的人写的!
Flutter能够实现跨平台开发,开发者更高效,性能接近原生;主要是Flutter在设计上采用了不同的模式
● 开发期间 Flutter App会运行在 Dart VM 上,开发者可以使用热重载技术实时更新代码获得反馈
● 正式发布 Flutter App 会预编译成二进制文件, 运行现在 Dart Precompile (只包括GC等必要功能)上,以获取最佳性能,此外 Flutter 还有一套高效的渲染系统,以保证足够的性能
快速开发
Flutter的热重载能力帮助开发者快捷方便的试验、重构UI、添加特性和修复bug。在仿真器、模拟器、ios、android硬件上体验亚秒级的重载,而不会丢失状态
跨平台
Flutter 基于图像绘制引擎进行渲染,在不同平台下绘制效果绝对一致,能做到真正的跨平台
绚丽UI
通过Flutter内建的、漂亮的、有质感设计的Cupertino(ios-flavor)小工具、丰富的动画API,平滑的自然滚动和平台感知,让用户感受UI设计的快乐
响应式框架
通过Flutter的现代响应式(Reactive)框架、丰富的平台布局、基础组件,能够轻松的构建用户界面。使用强大而灵活的API解决2D、动画、手势、效果等难题
支持插件,访问原生功能
通过平台api、第三方sdk和原生代码,使应用变得生动;Flutter可以重用现有的java、swift和Objc代码,并在iOS和Android上访问原生特性和SDK
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="" cid="n196" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import 'package:flutter/material.dart';//主函数(入口函数)void main() =>runApp(MyApp());// 声明MyApp类class MyApp extends StatelessWidget{ //重写build方法 @override Widget build(BuildContext context){ //返回一个Material风格的组件 return MaterialApp( title:'Welcome to Flutteraa', home:Scaffold( //创建一个Bar,并添加文本 appBar:AppBar( title:Text('Welcome to Flutter'), ), //在主体的中间区域,添加一个hello world 的文本 body:Center( child:Text( 'Hello JSPang , textAlign:TextAlign.left, overflow:TextOverflow.ellipsis, maxLines: 1, style: TextStyle( fontSize:25.0, color:Color.fromARGB(255, 255, 150, 150), decoration:TextDecoration.underline, decorationStyle:TextDecorationStyle.solid, ), ), ), ), ); }}</pre>
Flutter框架自下而上分为Embedder、Engine和Framework三层
● Embedder是操作系统适配层,实现了渲染 Surface设置,线程设置,以及平台插件等平台相关特性的适配
● Engine层负责图形绘制、文字排版和提供Dart运行时,Engine层具有独立虚拟机,正是由于它的存在,Flutter程序才能运行在不同的平台上,实现跨平台运行
● Framework层则是使用Dart编写的一套基础视图库,包含了动画、图形绘制和手势识别等功能,是使用频率最高的一层
● Flutter的FrameWork层是用Drat编写的框架(SDK);它实现了一套基础库,包含Material(Android风格UI)和Cupertino(iOS风格)的UI界面,下面是通用的Widgets(组件),之后是一些动画、绘制、渲染、手势库等;这个纯 Dart实现的 SDK被封装为了一个叫作 dart:ui的 Dart库,我们在使用 Flutter写 App的时候,直接导入这个库即可使用组件等功能
● Flutter的Engine层是Skia 2D的绘图引擎库,其前身是一个向量绘图软件,Chrome和 Android均采用 Skia作为绘图引擎
● Skia提供了非常友好的 API,并且在图形转换、文字渲染、位图渲染方面都提供了友好、高效的表现。Skia是跨平台的,所以可以被嵌入到 Flutter的 iOS SDK中,而不用去研究 iOS闭源的 Core Graphics / Core Animation。Android自带了 Skia,所以 Flutter Android SDK要比 iOS SDK小很多
Flutter包括一个现代的响应式框架、一个2D渲染引擎、现成的widget和开发工具。这些组件可以帮助您快速地设计、构建、测试和调试应用程序
Widget是Flutter应用程序用户界面的基本构建块;每个Widget都是用户界面一部分的不可变声明。 与其他将视图、控制器、布局和其他属性分离的框架不同,Flutter具有一致的统一对象模型:widget
Widget可以被定义为:
● 一个结构元素(如按钮或菜单)
● 一个文本样式元素(如字体或颜色方案)
● 布局的一个方面(如填充)
● 等等…
● Widget根据布局形成一个层次结构。每个widget嵌入其中,并继承其父项的属性。没有单独的“应用程序”对象,相反,根widget扮演着这个角色
● 您可以通过告诉框架使用另一个widget替换层次结构中的widget来响应事件,例如用户交互,替换后框架会比较新的和旧的widget,并高效地更新用户界面
● Flutter 应用运行在一个用 C++ 写的引擎中,Flutter 应用可以看做是一个游戏 App,代码都是在 引擎中运行
● 对于 Android 应用来说,Flutter 框架在引擎中实现了一个 继承于 SurfaceView 的 FlutterView 用户所看到的 UI 都是在这个 SurfaceView 中显示
● 如果要和原生平台功能交互,则可以在 Activity 中使用 FlutterView,并通过 Flutter 提供的消息 API 和原生平台收发消息
下面是几个使用 Flutter 框架的优点:
● 高生产率
● 一套代码可以开发出 Android 和 iOS 应用
● 同样的功能只需要很少的代码,如果你只开发一个平台的应用,使用 时髦的、更具有表达性的开发语言,也可以让你用更少的代码来实现同样的功能
● 开发原型和迭代更加方便
● 在应用运行的时候就可以修改代码并重新加载修改后的功能
● 直接修改崩溃的 bug,然后继续从崩溃的地方执行调试
● 创建优雅的、可定制的用户界面
● Flutter 内置了对纸墨设计(Material Design)的支持,提供了丰富的 UI 控件库可以用来创建纸墨设计风格的 UI
● 提供了可定制的 UI 框架,不再受制于手机平台控件的支持
私信发送“进阶”即可免费获取更多学习笔记、面试视频
技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面
Android 架构师之路还很漫长,与君共勉
PS:有问题欢迎指正,可以在评论区留下你的建议和感受;
欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下