Flutter领航系列篇01

大家好,小弟飞狐。终于有时间来写Flutter的系列教程。这个Flutter实战系列里我会带领大家从零基础开始迈向高手进阶。让大家由浅入深,从入门变高手。好咯话不多说,首先我们由3W开始。

What Flutter?

Flutter是一款移动开发框架,而且是谷歌新一代系统Fuchsia的御用框架,旨在用自家语言Dart写一套代码就可以开发跨平台应用。当然,这个跨平台不只是IOS和Android,而至于Fuchsia的野心在这里我们也不聊。提到Flutter的跨平台特性,就不得不提基于C/C++编写的Flutter Engine,Flutter能够在iOS和Android上运行起来,依靠的正是这个引擎。

Flutter Engine是Flutter应用程序的运行环境,开发人员可以通过Flutter框架和API在内部进行交互。这里面有个很有棒的特点就是低延迟、高帧速率。大家可能会觉得,普通的APP运行流畅就可以了,那么高帧率太过剩啦,这里飞狐为大家准备了小彩蛋AR来辩证性的看这个很棒的特性。
先科普一下AR,AR是将真实环境与虚拟环境实时叠加到同一帧画面。通过摄像头获取真实环境,通过图形图像识别算法识别真实环境中的特定物体,结合数据分析,再将虚拟物体嵌入同一帧画面。

Flare动画

上面的介绍Flutter 基于Skia引擎控制渲染帧数。都不说今年谷歌演示的Flare动画作为widget嵌入到flutter中,如何激发了设计师们的热情了,单就说同是谷歌推出的FuchsiaARCore再结合5G的浪潮。大家想想高帧速率对于AR的支持那可是起决定性作用的。也就是说飞狐在这里大胆的预测,这便是为之后用Flutter开发AR/VR应用埋下的伏笔。

Flutter框架结构图

上面这幅是Flutter框架结构图。对于开发者而言最常用的是widgets,因为APP里的元素都由widgets层来实现。Flullter有自己的一套内置的widgets,您甚至可以认为在Flutter里一切皆为组件。在图中大家可以看到Widgets上面有两种风格的组件库供您选择:
1.Material 就是大名鼎鼎的Material Design,是Google I/O 2014发布的设计语言,也是目前Android Mobile、Android Table、Desktop Chrome等平台的设计语言规范。前端的小伙伴们比较熟悉的Angular框架,官方提供的UI库也是Material。
2.Cupertino则是模拟的IOS设计。
接着往下看,Animation、Painting、Gestures这仨直译,大家也可以知道是动画、绘制、手势。
再往下看则是刚刚提到的Flutter Engine虚拟机。值得一提的是谷歌提供的Skia,因为Flutter的高帧速率正是因为采用了Skia引擎渲染。大家熟悉的Chrome浏览器、Android系统等也都用Skia进行绘制处理,包括图形图像、文本、动画等。

Why Flutter?

为什么要用flutter呢,讲到这个发展史,个人比较偏向由前端说开去。

首先,前端从最开始的PC端,到现在的小程序,APP,PWA等等,加上NodeJS、Deno等,可以说是将前端从工业化之后又掀向了另一个高潮。
这里我们单说移动端,从最开始的 WebApp 通过 WebView 加载本地网页,就像Cordova、Phonegap、Ionic等,小小的催催老一辈前端们的热泪。再到后面,react-native的时代,摒弃了WebView的方式,当时也是掀起了一阵小小的波澜。
同一时期的阿里也推出了Weex,也被不少小伙伴们追捧。Flutter也是借鉴了react-native思想,不一样的是青出于蓝而胜于蓝。理由如下图(其实比较中性,因为不太想吐槽):

Flutter框架对比

其次,对比Android,IOS来讲,作为未来系统Fuchsia的御用框架不说,通过Dart语言就能构建跨平台语言也不说。
我们就只谈Flutter的目标,不只是IOS和Android,而是不断探索将Flutter扩展到更多终端平台上。例如Flutter Desktop Embedding,这是一个能让Flutter 运行于 macOS、Linux 和 Windows 等桌面操作系统的项目。
再看看Hummingbird,基于Web 实现的Flutter运行时环境。通过Dart可编译JavaScript的特性,让Flutter开发的应用运行在标准Web平台且无需改动。

最后,Flutter本身的三大优势:
1.依赖Material Design,构建精美的UI界面设计。
2.基于Skia硬件加速图形引擎,低延迟输入、高帧速率,不只是媲美原生。
3.高效的开发效率,革命性的新特性Stateful Hot Reload,热重载对于前端应该是一点都不陌生了。

Flutter 官网案例

How Flutter?

好啦,怎样玩儿好flutter呢,飞狐会从这个实战系列开始,一个系列一个系列的让大家会从零开始感受flutter的魅力。每个系列也就6篇左右,给您的不单是实战一个APP,下个系列让您领略Flutter架构之美。首先配置环境等,请大家移步至配置篇

配置好环境之后,大家需要记住三个基本的命令:

  • 查看版本号:flutter --version
  • 检查当前开发环境是否存在问题:flutter doctor
  • 升级更新版本:flutter upgrade
Flutter --version

紧接着,我们开始创建第一个 flutter 项目,步骤列表如下:
1.命令行中输入open -a simulator,打开xcode模拟器
2.打开vscode编辑器,快捷键 Ctrl + Shift + P 打开命令面板,然后输入flutter
3.选择 flutter:New Project 选项创建新项目
4.选择项目存放目录后便自动创建 flutter 项目
5.打开vscode终端,输入flutter run

Flutter 初始化界面

再接再厉,这时候我们可以看到目录结构也非常清晰,这里我们先关注两个点:
1.lib文件夹,这是我们的工作文件夹,我们的开发文件之后都存放在这里,前端的小伙伴儿们可以当成src
2.pubspec.yaml文件,这是构建依赖包的文件,前端小伙伴儿们可以理解为package.json

打开lib文件夹可以看到main.dart,这就是我们上图对应的开发文件。现在清空这个文件,咱们从零开始,飞狐一步一步带您构建应用。步骤如下:
1.引入material组件包,箭头表达式的写法前端小伙伴比较熟悉,mian()是主函数,runApp()里是你要执行的应用敲入如下代码:

import 'package:flutter/material.dart';  // 引入material组件包
void main() => runApp(MyApp());  // 运行应用
class MyApp extends StatelessWidget {}

2.这么写,大家会发现类MyApp上有一个错误提示未实例build函数,我们改造一下,再加入一个文本控件,语法如下:

Text('文本内容', style: TextStyle(fontSize: 12))

import 'package:flutter/material.dart';  // 引入material组件包
void main() => runApp(MyApp());  // 运行应用
class MyApp extends StatelessWidget {
@override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '第一个应用哟',  // 任务栏的标题
      home: Text('hello world'),  // 应用的主界面
      theme: ThemeData(primarySwatch: Colors.red),  // 配置应用主题
    );
  }
}

敲完上面的代码之后,在终端命令界面里按一下R,就自动刷新了。大家可以打开模拟器看看,变成了这幅模样。

Flutter Text组件

3,接着我们加入脚手架组件Scaffold,脚手架主要包含部分为:

  • 北丐导航条:appBar
  • 中神通主体内容:body
  • 西毒侧边栏:drawer
  • 南帝导航栏:bottomNavigationBar
  • 东邪浮动按钮:floatingActionButton
    我们来实现一把,代码如下:
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.lightBlue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('北丐'),
        ),
        body: Center(
          child: Text('中神通'),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {},
          child: Text('东邪')
        ),
        drawer: Drawer(),
      ),
    );
  }
}
Flutter Scaffold组件

这样我们就已经构建了一个应用的基本界面。这一回我们就讲到这里啦,非常基础。复盘一下,这一回我们对Flutter进行了基本的介绍,学了基础控件Scaffold和Text,其实还学了一个无状态组件StatelessWidget。
我们在 flutter领航系列02 中会详细介绍flutter组件的状态。

好啦,下回见,祝大家新年快乐耶(^-^)V

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

推荐阅读更多精彩内容