开启Flutter之旅

        Flutter 是谷歌的移动UI框架,可以快速在 iOS Android 上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的

快速开发

        Flutter的热重载可帮助您快速地进行测试、构建UI、添加功能并更快地修复错误。在iOS和Android模拟器或真机上可以在亚秒内重载,并且不会丢失状态。

富有表现力,漂亮的用户界面

        使用Flutter内置美丽的Material DesignCupertino(iOS风格)widget、丰富的motion API、平滑而自然的滑动效果和平台感知,为您的用户带来全新体验。

现代的,响应式框架

        使用Flutter的现代、响应式框架,和一系列基础widget,轻松构建您的用户界面。使用功能强大且灵活的API(针对2D、动画、手势、效果等)解决艰难的UI挑战。

访问本地功能和SDK

        通过平台相关的API、第三方SDK和原生代码让您的应用变得强大易用。 Flutter允许您复用现有的Java、Swift或ObjC代码,访问iOS和Android上的原生系统功能和系统SDK。

统一的应用开发体验

        Flutter拥有丰富的工具和库,可以帮助您轻松地同时在iOS和Android系统中实现您的想法和创意。 如果您没有任何移动端开发体验,Flutter是一种轻松快捷的方式来构建漂亮的移动应用程序。 如果您是一位经验丰富的iOS或Android开发人员,则可以使用Flutter作为视图(View)层, 并可以使用已经用Java / ObjC / Swift完成的部分(Flutter支持混合开发)。

原生性能

        Flutter包含了许多核心的widget,如滚动、导航、图标和字体等,这些都可以在iOS和Android上达到原生应用一样的性能

一、Flutter 特点

  • 跨平台:现支持5种平台运行(macos、windows、linux、Android、ios),甚至能种谷歌最新操作系统(fuchsia)上运行;
  • 丝滑般的体验:使用Flutter内置的Material Design和Cupertino风格组件、丰富的api、平滑的滑动效果,带来全新的体验;
  • 响应式框架:使用Flutter的响应式框架和一系列基础组件,可以轻松构建用户界面,使用功能强大且灵活的API(针对2d、动画、手势、效果等)能解决艰难的ui挑验;
  • 支持插件:通过Flutter的插件可以访问平台本地API,比如相机、蓝牙、Wi-Fi等.借助现有的java、Swift、Objective C、C++代码实现对原生系统的调用;
  • 60fps超高性能:Flutter采用GPU渲染技术,性能极高,Flutter编写的应用程序可以达到60fps(每秒传输帧数),官方宣称用flutter开发的应用甚至会超过原生应用的性能;

二、Flutter 核心概念:组件、构建、状态、框架

 1. 一切皆为组件
        组件(Widget)是Flutter应用程序用户界面等基本构建快,不仅按钮、输入框、卡片、列表这些内容可以作为Widget,甚至将布局方式、动画处理都是视为Widget,所以Flutter具有一致的统一对象模型:Widget。
        Widget可以定义为:

  • 一个界面组件(如输入框或按钮)
  • 一个文本样式(如字体或颜色)
  • 一种布局(如填充或滚动)
  • 一种动画处理(如缓动)
  • 一种手势处理(GestureDetector)

        Widget具有丰富的属性及方法,属性通常用来改变组件的状态(颜色、大小等)及回调方法的处理(如点击事件回调,手势事件回调等),方法主要提供一些组件的功能扩展。比如TextBox是一个矩形的文本组件,属性方法如下:

  • bottom:底部间距属性
  • top:顶部间距属性
  • left:左侧间距属性
  • right:右侧间距属性
  • direction:文本排列方向属性
  • toRect:导出矩形方法
  • toString: 转换成字串方法

2. 组件嵌套
        复杂的功能界面通常都是由一个又一个简单功能的组件组装完成的。有的组件复杂布局,有的负责定位,有的负责调整大小,有的负责渐变处理,等等。这种嵌套组合的方式最大的好处就是解耦
        例如,界面中添加了一个居中组件Center,居中组件里嵌套了一个容器组件Container,容器组件里嵌套了一个文本组件(Text)和一个BoxDecoration,代码如下:

body: Center(
    //添加容器
    child: Container(
        //添加装饰器
        decoration: BoxDecoration(
        ),
        child: new Text(
        //添加文本组件
        ),
    ),
),

        最基础的组件是widget,其他所有的组件都是继承于widget。widget下有两大类组件:有状态组件无状态组件。有状态组件是界面会发生变化的组件,如Scrollable、Animatable等,无状态组件就是界面不会发生变化的组件,如Text、AssetImage等。


3. 构建
        可以重写widget的build方法来构建一个组件,如下代码所示:

@protected Widget build(BuildContext context);

        构造即为创建一个Widget,返回值也是一个Widget对象,不管返回的是单个组件还是返回通过嵌套方式组合的组件,都是widget的实例。

        在build方法中我们传入一个参数context。BuildContext即为构建Widget上下文,每一个BuildContext对应一个Widget。在任意一个组件的build方法中都需要传入一个BuildContext对象。
4. 处理用户交互
        如果Widget需要根据用户交互或其他因素进行更改,则该widget是有状态的。例如,一个Widget计数器在用户点击一个按钮时递增,那么该计数器的值就是该widget的状态。当该值发生变化时需要重新构建Widget以更新UI。
        这些Widget继承于StatefulWidget(而不是State),并将它们的可变状态存储在State的子类中。


        每当改变一个State对象时(例如增加计数器)必须调用setState()来通知框架,框架会再调用State的构建方法来更新用户界面。
        有了独立的状态和Widget对象,其他的Widget可以以同样的方式处理有状态和无状态的Widget,而不必担心失去状态。父Widget可以自由的创建子Widget的新实例且不会失去子Widget的状态,而不是通过持有子Widget来维持其状态。框架会在适当的时候完成查找和重用现有状态对象的所有工作。
5. 状态
        Flutter中的状态(State)和React中的状态概念是一致的。State是一个组件的UI数据模型,是组件渲染时的数据依据。Flutter程序的运行可以认为是一个巨大的状态机,用户的操作、请求API和系统事件的触发都是推动状态机运行的触发点,触发点通过调用setState()方法推动状态机进行响应,实现不同的状态,然后渲染UI,让UI和数据保持一致。状态的生命周期如图所示:

6. 分层的框架

        Flutter框架是一个分层的结构,每层都建立在前一层之上,上层比下层使用频率更高。
        分层设计的目标是帮助开发者用更少的代码做更多的事。例如,Material层通常组合来自Widget层的基本Widget,而Widget层通过对象渲染层来构建。
        分层结构为构建应用程序提供了许多选项。选择一种自定义的方法来释放框架的全部表现力,或者使用构建层中的构建块,或混合搭配。可以使用Flutter提供的所有Widget,也可以使用Flutter团队定制的Widget。也就是说,你可以从高层次、统一的Widget概念中获得开发效率的优势,也可以深入下层施展你的才能。


 

发布了51 篇原创文章 · 获赞 53 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_34519487/article/details/104098719