##看看历史 你想想一套代码,移动端、web端、pc端都搞定!这生产力!非常值得学习了。

2015年5月 Dart 开发者峰会上,亮相了基于Dart 语言的移动应用程序开发框架Sky ,后更名为 FlutterDart语言2011年诞生,起初的竞对目标是Js,2016年谷歌的AdWordsAdSenseFiber项目团队开始把Dart融入他们的前端应用开发。一项当时的内部报告表明,Dart可以帮助他们提升25%100%的前端开发效率。谷歌内部的Dart代码量比去年增长了3.5倍。

5月7日 , Google i/O大会 官方宣布,Flutter 1.5 预览版来了,已支持移动、Web、桌面和嵌入式设备,也意味着它正式成为了支持多平台的轻量级 UI 框架,对于开发者而言越来越友好!

##看看架构 Flutter for Mobile 01850A5A55468298AB6693E8585B4CBC.jpg

Flutter for web ![C827C2BDF29EBA36E7DD6A10C26A4861.jpg][2]

##动手鼓捣 一个最简单的Flutter应用程序,只需一个widget即可!

i } m o p i r ) o d u ; r n n ) t m A e , a p w c ) ' i p h , p n ( C i ' t a ( e l H e c ) n d e x k t : l t a { e l D g r n o i e ( e , r : w e f w c l T o t u e r i t x l o t t d n e ( ! : r ' / , T m e a x t t e D r i i r a e l c . t d i a o r n t . ' l ; t r ,

UIView 相当于 Flutter 中的什么? 在 iOS 中,构建 UI 的过程中将大量使用view对象。这些对象都是 UIView 的实例。它们可以用作容器来承载其他的 UIView,最终构成你的界面布局。

Flutter中,你可以粗略地认为Widget相当于 UIView WidgetiOS 中的控件并不完全等价,但当你试图去理解Flutter是如何工作的时候,你可以认为它们是“声明和构建 UI 的方法”。

然而,WidgetUIView还是有些区别的。首先,Widgets 拥有不同的生存时间:它们一直存在且保持不变,直到当它们需要被改变。当 Widgets 和它们的状态被改变时,Flutter 会构建一颗新的 Widgets 树。作为对比,iOS 中的 views 在改变时并不会被重新创建。但是与其说views是可变的实例,不如说它们被绘制了一次,并且直到使用 setNeedsDisplay() 之后才会被重新绘制。

此外,不像 UIView,由于不可变性,Flutterwidgets 非常轻量。这是因为它们本身并不是什么控件,也不会被直接绘制出什么,而只是 UI 的描述。

Flutter 包含了 Material 组件库。这些 widgets 遵循了 Material 设计规范。MD 是一个灵活的设计系统,并且为包括 iOS 在内的所有系统进行了优化。

Flutter有一套丰富、强大的基础widget,其中以下是很常用的:

StatelessWidget 是无状态的 Widget ,当我们要展示的 Widget 不需要改变显示内容的时候,使用StatelessWidget即可;

StatefulWidget 是有状态的 Widget ,当我们要展示的 Widget 需要改变显示内容的时候,需要使用 StatefulWidgetStatefulWidget 的子类相当于存放了State的配置信息。StatefulWidget的界面显示效果由 State 来控制展示。 当 StatefulWidget 对应的界面数据变化后,调用 setState() 方法,然后系统会运行 buildContext() 就可以做到更新界面的效果。

Row、 Column: 这些具有弹性空间的布局类Widget可让您在水平(Row)和垂直(Column)方向上创建灵活的布局。其设计是基于web开发中的Flexbox布局模型。

Container 是一个容器Widget

Text 用于展示文字,相当于 iOS 中的 UILabel

Image 用于展示图片;

FlatButton 相当于 iOS 中的 UIButton ,用于处理交互事件,同时,Flutter中可以使用GestureDetectorWidget 进行包裹,也可以达到具备交互的效果的目的;

ListView 相当于 iOS中的 UITableView ,用于展示列表内容。

ListTile 相当于iOS 中的 UITableViewCell

i c } c } } m l l o p a M f @ W } a @ W } i r o s y i o i s o i d u ) r s A n v d r ) s v d r ) n t h ; t p W a e g e ; e g e ; m A i o M p i l r e t h p d c ) M r e t c ) a p t m ' y B d r t u e a e h , y r t M u h , i p l e p A a g W i r i d c i c ] S i a r i c ] n ( e : a p r e i d b n g d o R l / h , c d b t n C l h , ( n : c p ( t d e u h i r o d i n ) n ) n ) a e u e o d i n ) n ) ) e n k B { g i n t n a w : l e , e , e , f i r n l : l e , e , w ' e a a t e l e : g t d w i t o w c w i t o f l i e u d w t ) w c ) { M w g r h t d w : i n r c o n E h c o n o d a w m n r i , h , M y e i ( 5 o e e I o o P x E i I o o P l ( l n e e M t ' s E i c a M : e s t B C 6 c n w n c n l r p x l c n l r d B M w n y l E t x l h t a y f x . i u o . o : : o : t e a p d o : t e u a i : A e x y p d i e p S l t t t i n 0 n R n i s n a : n i s e i U t s C p : a l a : l r p c u e i l l t , s n o < < B n p s d n B n p s x l I e o < p m e n d i ' a t n t e d a t e 线 w W W u e : e e d t u e : e t d r l W B n p : d n : a , f t d l ; C i w ( i i t w d d e i t w d e C i u i a e l e e l f e s e o n E d d t ' : d t t ' : n o a m d r w e T d w n A r } n e d B g g o I N e ( l o I S d n l n g ( h ( e p l / S ) t r g o e e n c a n x e n c e n s t ( ( e T t e C w p d m t ; " e ( e x l t t ( o v u p , ( o a u e 线 t e i m e ( u ( a a f x I D i > > n i l a n r l S x > x t e n T s ) t t i t n e n [ ( g l n ( c l t t [ t l . t e e , e e n s c e I a , d I h , a ( e o e x d r l a c e o a c t s c ' t c . ' f r t i e l o t r r o i o , e o , ( ( ( b a s " n s a n i n l n c ' y l s t . t l s n t s e t o H . W e s i a . n s . s e n e t d i x y o y m m u s s x t l h a d t m n o e e l c e W t e l e r g ) m ( u n n l h a i ) x o t e e c t u u i r d t , O ' t { t o ) ' l c g { ) S ; r l , , d h e . w { i o ) t p o t c r t , r r a ( : b o { i l s h u m d k o C t f a ! r o t i r ' s i l o l y ) w z o n l T , i o r e t n s t x c t . h t h a b e T e l l h r : u a e e v m 8 [ a e . 5 i . 0 0 l t ) 0 a i , ] b t ) l l , e e , s p a c e .