前言
在如今的 Flutter 大潮下,本系列是让你看完会安心的文章。
本系列将完整讲述:如何入门 Flutter 开发,如何快速从 0 开发一个完整的 Flutter APP,配套高完成度 Flutter 开源项目 GSYGithubAppFlutter,提供 Flutter 的开发技巧和问题处理,之后深入源码和实战为你全面解析 Flutter。
笔者相继开发过 Flutter、React Native 、Weex 等主流跨平台框架项目,其中 Flutter 的跨平台兼容性无疑最好。前期开发调试完全在 Android 端进行的情况下,第一次在 iOS 平台运行居然没有任何错误,并且还没出现 UI 兼容问题,相信对于经历过跨平台开发的猿们而言,是多么的不可思议画面,并且 Fluuter 的 HotLoad 相比较其他两个平台,也是丝滑的让人无法相信,吹爆了!
文章汇总地址:
Flutter 完整实战实战系列文章专栏
Flutter 番外的世界系列文章专栏
一、基础篇
本篇主要涉及:环境搭建、Dart语言、Flutter的基础。
1、环境搭建
Flutter 的环境搭建十分省心,特别对应 Android 开发者而言,只是在 Android Stuido 上安装插件,并到 GitHub Clone Flutter 项目到本地之后执行 flutter doctor 命令就可以完成配置,其实中文网的搭建Futter开发环境 已经很贴心详细,从平台指引开始安装基本都不会遇到问题。
这里主要是需要注意,因为某些不可抗力的原因,国内的用户有时候需要配置 Flutter 的代理,并且国内用户在搜索 Flutter 第三方包时,也是在 https://pub.flutter-io.cn 内查找,下方是需要配置到环境变量的地址。(ps Android Studio下运行 IOS 也是蛮有意思的感觉)
///win直接配置到环境编辑即可,mac配置到bash_profile或者zsh
export PUB_HOSTED_URL=https://pub.flutter-io.cn //国内用户需要设置
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn //国内用户需要设置
2、Dart语言下的Flutter
在跨平台开领域被 JS 一统天下的今天,Dart 语言的出现无疑是一股清流。作为后来者,Dart语言有着不少 Java、Kotlin 和 JS 的影子,所以对于 Android 原生开发者、前端开发者而言无疑是非常友好。
官方也提供了包括 iOS 、React Native 等开发者迁移到 Flutter 上的文档,所以请不要担心,Dart 语言不会是你掌握 Flutter 的门槛,甚至作为开发者,就算你不懂 Dart 也可以看着代码摸索。
Come on,下面主要通过对比,简单讲述下 Dart 的一些特性,主要涉及的是 Flutter 下使用。
2.1、基本类型
- var 可以定义变量,如
var tag = "666"
,这和 JS 、 Kotlin 等语言类似,同时 Dart 也算半个动态类型语言,同时支持闭包。 Dart
属于是强类型语言 ,但可以用var
来声明变量,Dart
会自推导出数据类型,所以var
实际上是编译期的“语法糖”。dynamic
表示动态类型, 被编译后,实际是一个object
类型,在编译期间不进行任何的类型检查,而是在运行期进行类型检查。- Dart 中 number 类型分为
int
和double
,其中 java 中的 long 对应的也是 Dart 中的 int 类型,Dart 中没有 float 类型。 - Dart 下只有 bool 型可以用于 if 等判断,不同于 JS 这种使用方式是不合法的
var g = "null"; if(g){}
。 - Dart 中,switch 支持 String 类型。
2.2、变量
- Dart 不需要给变量设置
setter getter
方法, 这和 kotlin 等语言类似。Dart 中所有的基础类型、类等都继承 Object ,默认值是 NULL, 自带 getter 和 setter ,而如果是 final 或者 const 的话,那么它只有一个 getter 方法。 - Dart 中 final 和 const 表示常量,比如
final name = 'GSY'; const value= 1000000;
同时static const
组合代表了静态常量,其中 const 的值在编译期确定,final 的值要到运行时才确定。 - Dart 下的数值,在作为字符串使用时,是需要显式指定的。比如:
int i = 0; print("aaaa" + i);
这样并不支持,需要print("aaaa" + i.toString());
这样使用,这和 Java 与 JS 存在差异,所以在使用动态类型时,需要注意不要把 number 类型当做 String 使用。 - Dart 中数组等于列表,所以
var list = [];
和List list = new List()
可以简单看做一样。
2.3、方法
- Dart 下
??
、??=
属于操作符,如:AA ?? "999"
表示如果 AA 为空,返回999;AA ??= "999"
表示如