flutter 基础知识

linux安装配置flutter

参考官方配置,很容易就配置完毕后https://flutterchina.club/setup-linux/,可能在执行 flutter doctor会报device 找不到的问题,连上手机或者模拟器再执行一遍,基本就不会报错了。

flutter的层设计

Flutter总共分为四层,从下到上分别是:dart:ui,Rendering,Widgets,Material。参照下图:


image

dart:ui

dart:ui是flutter底层引擎所提供的一个dart库,是flutter对dart标准库的一个扩展。它提供了一套基于canvas的绘图api,也包含了用于跟操作系统交互的模块mojo,当然,还包括了所有dart标准库。dart:ui提供最基础的底层api,要直接使用它,你必须写非常多的代码,进行大量的运算:比如在每一帧中计算每个组件的坐标,编码工作很繁琐。一般来说,开发者不会直接使用dart:ui,但如果他们需要写一些特殊的应用,比如开发游戏,那可能就需要在dart:ui的基础上去构建自己的框架。

Rendering

Rendering层是布局(排版)抽象层,它把dart:ui层api抽象封装成大量的Render对象,免除了大量布局坐标的手动计算,并还对布局数据进行了缓存处理,提升了渲染效率。开发者使用层层嵌套的构造函数来构建一个render对象树,当发生用户交互或者数据发生改变时,需要显式更新对应的render对象,即更新UI。 这样的设计与其他UI系统非常类似,比如:web的dom,android与ios的视图层等。因为遵循了传统的开发思路,喜欢这种方式的开发者可以直接使用本层的api进行开发。

Widgets

Widgets层是对Rendering层对象的封装层,它引入element对象以及StatefulBuilder来管理底层的render对象,开发者使用不可变的Widget对象来创建UI,当数据发生变化的时候,再重新构建一个新的widget树即可,不再需要使用分离的代码来维护UI(Rendering层就要用一部分代码构建初始UI,另一部分更新UI)。这一层应该就是flutter默认的或者说最基础的组件库,你可以继承并修改它们,做成属于自己的组件。

Material

Material层相对来说最容易理解,它们就是使用Widgets层对象,实现了Material Design的顶层UI组件。

Dart

语言

工具

创建一个flutter project

  1. 选择 File>New Flutter Project
  2. 选择 Flutter application 作为 project 类型, 然后点击 Next
  3. 输入项目名称 (如 myapp), 然后点击 Next
  4. 点击 Finish
  5. 等待Android Studio安装SDK并创建项目.

上述命令创建一个Flutter项目,项目名为myapp,其中包含一个使用Material 组件的简单演示应用程序。

在项目目录中,您应用程序的代码位于 lib/main.dart.

第一次创建会比较慢,在国内镜像url都已经配置好的情况下,稍微等待几分钟就会创建完成。

包管理

每个flutter都是有一个包管理配置文件pubspec.yaml,在这里可以引入外部包,可以引入字体库和一些本地图片等资源

name: flutter_layout
description: A new Flutter application.

dependencies:
  flutter:
    sdk: flutter
    cupertino_icons: ^0.1.2

dev_dependencies:
  flutter_test:
    sdk: flutter

  uses-material-design: true
  assets:
      - images/
   fonts:
     - family: Schyler
       fonts:
         - asset: fonts/Schyler-Regular.ttf
         - asset: fonts/Schyler-Italic.ttf
           style: italic
     - family: Trajan Pro
       fonts:
         - asset: fonts/TrajanPro.ttf
         - asset: fonts/TrajanPro_Bold.ttf
           weight: 700

有状态的部件(Stateful widget)

Stateless widgets 是不可变的, 这意味着它们的属性不能改变 - 所有的值都是最终的.

Stateful widgets 持有的状态可能在widget生命周期中发生变化. 实现一个 stateful widget 至少需要两个类:

一个 StatefulWidget类。
一个 State类。 StatefulWidget类本身是不变的,但是 State类在widget生命周期中始终存在.

在Flutter中构建布局

未完待续...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容