Flutter简介

Flutter简介

Flutter是Google开源的移动应用框架,一套代码能完成跨平台(AndroidIOS)移动应用的开发,对于Flutter而言,其有以下特点:

  • 现代响应式框架
  • 高速的2D渲染引擎
  • 方便快捷的开发工具
  • 各种组件库

下面我们将针对Flutter中的特性做简单介绍。

Widget简介

Flutter中,一个页面是由许多个Widget构建而成的树形结构,WidgetFlutter应用的基础组件,相当于Android原生中的View组件,一个Widget使用Dart语言编写,用于描述一部分可参与用户交互的界面,在Flutter中,几乎都是用Dart 编写的Widget组件。

Android Studio中新建一个Flutter项目并运行,运行完成后我们会发现在Android Studio右侧工具栏出现了Flutter Inspector选项,在该选项卡内,我们可以更深层级的理解上面这段话。

上图为Flutter Inspector中的Widgets面板中的内容(左侧为当前页面的截图),在这里我们可以看到页面上的所有元素都是Widget。当启动Widget Mode时,我们可以选中某一个Widget,同时应用对应区域上也会选中并提示Widget类型(此模式在真机和虚拟机上均适用,类似于Android原生的显示布局边界的功能,只不过这里显示的是单个Widget的边界),同时也会在面板上显示当前Widget的属性信息,这里就印证了我们前面说的在Flutter中,几乎都是用Dart编写的Widget组件,在界面发生变化时,我们可以通过图中的刷新按钮,来同步Widgets树到面板中。

随后我们切换到Widgets左侧的Render Tree面板:

从图中就可以看出我们的基础页面渲染组成仍然是类似于原生的树形结构。

Flutter中,所有元素都是Widget,并且Widget之间可以发生嵌套,并不像我们的Android原生独立出了ViewGroup,在Flutter中,Widget既可以是View也可以当做ViewGroup来用,下图中罗列的所有元素都是Widget,当然还有很多没有列举出来。

Flutter中,Widget分两类,一类具备State状态(StatefulWidget),一类不具备(StatelessWidget)即构建后静态不可变,UI界面刷新依赖于状态切换,这样节省了开发的状态管理,使得UI状态管理更加轻松,下图为StatefulWidget的生命周期:

Flutter框架简介

Flutter中,上层Dart语言编写的App在编译时被转化为对应的平台语言,执行效率更高。在界面渲染上Flutter采用Skia作为底层的图像引擎,渲染速度更快。整体的Flutter Framework如下图:

Flutter选用
Dart作为其开发语言,除了其语法开源等方面的因素外,主要还关乎Dart语言的编译方式,
Dart语言有两种编译时:

  • Just in time(JIT)
  • Ahead of time(AOT) JIT编译时支撑了FlutterHot reload开发模式(即代码热更新,修改后ctrl+s实时运行到真机或者模拟器上),使得整个开发过程更流畅,对界面的修改实时可见(当然这里的实时是相对Android原生的UI修改到验证速度而言的,这里重点为了说明其Hot reload模式的便捷性)。 AOT编译时支撑了Flutter的跨平台特性,在运行前编译时会把我们的Dart代码编译成对应的Arm代码。

Flutter应用目录结构

我们在Android studio或者cmd( 通过flutter create方式)创建的Flutter应用一般会生成四个目录

  • android Android平台的原生代码目录,有一些额外的原生逻辑可在该目录下处理
  • ios IOS平台的原生代码目录,有一些额外的原生逻辑可在该目录下处理
  • lib 跨平台的功能代码目录,该目录下的文件均使用Dart语言编写,在运行前编译时会将其编译成对应的ARM 代码,一般情况下,开发过程中我们只需要关注该目录就可以,在新建项目的项目中,该目录一般会自动生成main.dart文件,该文件为整个Dart部分代码的入口文件,其内部代码如下:
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(title: new Text(title),),
      body: Container(),
    );
  }
}
复制代码

其中main函数为整个Flutter部分的入口函数,相当于C语言的main函数,整个Flutter部分的代码调起均在该函数内(这也就意味着我们原来在Application中进行的数据初始化,全局变量初始化之类的操作,需要在该函数中完成,如果有需要的话)。 runApp函数指定Flutter部分的第一个Widget页面,随后运行就可以看到页面效果了 (这里描述为Flutter部分的主要原因是有可能存在Flutter混合原生开发的情况,不过一般存在混合的话会有FlutterActivity类的子类存在。)

  • tests 该目录下主要是Dart相关的一些测试代码目录

下面是我的公众号,欢迎大家关注。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100907.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jmespath(1)基础语法

    jmespath(1)基础语法前言JMESPath是JSON的查询语言。您可以从JSON文档中提取和转换元素官方文档:https://jmespath.org/tutorial.html基本表达式JMESPath用的最多的

    2022年7月29日
    4
  • Root apk 2021_proguard混淆jar包

    Root apk 2021_proguard混淆jar包backdoor-apk从名字上我们就能知道它的用途了,没错就是用来制作APK后门的。这款工具使用起来非常方便,而且功能也很强大!话不多说,下面我们直接进入正题。首先,让我们对它进行安装,在安装前我们需要先安装它的一些依赖lib库文件:apt-getinstalllib32stdc++6lib32ncurses5lib32z1这里询问我们,对这些安装的服务,当他们更新时不再进行询…

    2022年8月20日
    5
  • ES6—new Promise()讲解,Promise对象是用来干嘛的?应该怎么用?使用场景有哪些?

    ES6—new Promise()讲解,Promise对象是用来干嘛的?应该怎么用?使用场景有哪些?ES6Promise先拉出来遛遛复杂的概念先不讲,我们先简单粗暴地把Promise用一下,有个直观感受。那么第一个问题来了,Promise是什么玩意呢?是一个类?对象?数组?函数?别猜了,直接打印出来看看吧,console.dir(Promise),就这么简单粗暴。这么一看就明白了,Promise是…

    2022年4月30日
    81
  • 进程间的7种通信方式_linux 进程间通信

    进程间的7种通信方式_linux 进程间通信1无名管道通信无名管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2高级管道通信高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。3有名管道通信有名管道(namedpipe):有名管道也是半双工的通信方式,但是它允许

    2022年10月11日
    0
  • PXE服务「建议收藏」

    PXE服务「建议收藏」PXE服务器简介PXE(prebootexecuteenvironment)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivialfiletransferprotocol)或MTFTP(multicasttrivialfiletransferprotocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包

    2025年6月11日
    0
  • Vue入门—常用指令详解

    Vue入门—常用指令详解

    2022年2月7日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号