配置环境
要学习Flutter,那么第一部肯定是配置好开发环境。我们可以去到Flutter的中文网站: https://flutterchina.club/. 里面有详细的讲解。这里我也简单的说一下。
第一步
首先先配置个人的用户环境,在Flutter中文网里面所看的,第一步先配置好自己的用户变量,这里直接复制网站里的键和值就好了
这里放到里面去。
第二步
接下来就是要下载 Flutter 的SDK,如果点解官网的地方是需要翻墙去下载的,那个不翻墙可以去github里下载 链接: https://github.com/flutter/flutter/releases.
下载了以后,将安装包zip解压到你想安装Flutter SDK的路径(如:C:\src\flutter;注意,不要将flutter安装到需要一些高权限的路径如C:\Program Files\)。
在Flutter安装目录的flutter文件下找到flutter_console.bat,双击运行并启动flutter命令行,接下来,你就可以在Flutter命令行运行flutter命令了。
第三步
需要更新环境变量,要在终端运行 flutter 命令, 你需要添加以下环境变量到系统PATH:
转到 “控制面板>用户帐户>用户帐户>更改我的环境变量”
在“用户变量”下检查是否有名为“Path”的条目:
如果该条目存在, 追加 flutter\bin的全路径,使用 ; 作为分隔符.
如果条目不存在, 创建一个新用户变量 Path ,然后将 flutter\bin的全路径作为它的值.
在“用户变量”下检查是否有名为”PUB_HOSTED_URL”和”FLUTTER_STORAGE_BASE_URL”的条目,如果没有,也添加它们。
在这些都准备好以后,就可以打开一个新的命令提示符或PowerShell窗口并运行以下命令以查看是否需要安装任何依赖项来完成安装:flutter doctor
第四步
这里我是用Android Studio 开发的,所以在设置插件里面,寻找Flutter插件并下载就ok了。
在第一次下载的时候,会询问是不是下载Dart插件,点击下载就ok了。在重启AS后就开始创建自己第一个Flutter工程,自此Flutter的环境变量就完成了。
Dart语言学习
在创建Flutter第一个工程后,会看到第一个dart文件main.dart。里面有一个main方法,学过Kotlin的朋友应该知道,这种可以写类的外部的函数,叫做顶层函数。
Dart是强类型语言。
Dart 一切皆对象,比如我们在Java在声明 int i;的时候,默认值是0,但是在Dart里面输出是null,所以说Dart里一切皆对象。
在定义变量的时候,可以用Object ,Var ,dynamic,或者直接像Java上 int String 定义变量。但是在使用区别不大,但是在底层实现有区别。
Object :在字节码里面就是定义了Object变量。
Var:在声明的变量赋值那一刻,就决定了它是什么类型。比如赋值了int 在字节码里就是int型。
dynamic:动态的变换。
final:运行期常量
const:编译器常量(这个运行效率更高)
编辑器不确定的值,不可以赋值给 const的常量。
内置数据类型
数值类型: num
在Dart 当中的 Int 可以 当成java中的 Long使用,因为如果超过4个字节,会编译成Long,如果不超过会编译成Short 或者 Int。(根据平台动态来决定)
字符串类型: String
在Dart中 String 比 java更方便,当我们想在字符串里使用双引号的时候在java里我们需要使用 \ 。在Dart中我们可以用’'单引号来括住双引号来使用。当我们想输出\n的时候在 java 是需要\n来输出,在Dart中我们可以用r前缀来定义。在多行字符串定义中, 我们可以使用3个双引号或单引号来定义。
String str = "'karson' \" text \"";
Sting str1 = ‘“Karson” \' text\' ’;
//这两种方式都是可以的
//在字符拼接上跟kotlin很像
int i = 10; //默认是null
String str = "字符大小";//默认是null
// i.bitLength 是方法 所以要用{}来阔住
print("$str:拼接${i.bitLength}");
//r前缀 raw:原始
String str1 = r"\n";
//多行字符串
String str2 = """dfads f
fdsa fsda
fasdf sadf
fdas fs""";
布尔类型:bool
在Dart中,这里布尔类型也是一个类。
//定义一个布尔类型
bool b = false;
数组类型:List
/**
* List
* */
//创建了一个String 的数组
List<String> list = new List();
List<int> list1 = [1,2,3,4,5];
//像Java一样,通过下标找数据
int item1 = list1[0];
//遍历数组
for(var o in list1){
}
for(var j = 0;j < list1.length;++j){
}
//List 对象不可变
//const 修饰的是[1,2,3]这一个对象,表示这个对象不可变,不能再add元素了
List<int> list2 = const[1,2,3];
//编译器可以,运行会报错
list2.add(1);
list2 = [2,3];//这样是可以引用的
//const 修饰的是变量,也就是引用,那么变量就不能够重新引用其他的对象了,也不能去修改
const List<int> list3 = [1,2,3];
// list3 = [2,3]; 这样是会报错的
映射集合:Map
/**
* 映射集合 Map
* */
Map map = new Map();
//也可以 这样创建的
Map<String,int> map1 = {"1":1,"2":2,"3":3};
//[]这里传入得是key
print(map1["1"]);
// 修改value
map1["1"] = 100;
print(map1["4"]);//如果取一个不存在的元素,会得到一个null
//遍历
map1.forEach((key, value) {
});
var iterable = map1.keys;
iterable.forEach((element) {
var j = map1[element];
});
UniCode:Runes
/**
* Runes :特殊字符表示类(Unicode32)
* */
var clapping = '\u{1f44f}';///5个15进制 需要使用{}
print(clapping);//就是一个特使字符 拍手
//获取 16位代码单元
print(clapping.codeUnits);//[55357,56399]
//获得Unicode代码
print(clapping.runes.toList());//[128079]
//fromCharCode 根据字符码创建字符串
print(String.fromCharCode(128079));
print(String.fromCharCode(0x1f44f));
print(String.fromCharCodes(clapping.runes));
print(String.fromCharCodes([55357,56399]));
标识符:Symbols
/**
* Symbols 标识符
* */
var a = #A;
print(a.runtimeType);//Symbols