簡(jiǎn)介
Flutter主要用于跨平臺(tái)開(kāi)發(fā),這里以Android和iOS開(kāi)發(fā)作為學(xué)習(xí)主線
Flutter其實(shí)是一個(gè)SDK也是一個(gè)框架,用到的語(yǔ)言是Dart
學(xué)習(xí)Flutter之前,首先需要了解和掌握Dart語(yǔ)言的語(yǔ)法
環(huán)境安裝
Flutter官網(wǎng)
Flutter中文網(wǎng)
Flutter Book中文
具體的安裝按照官網(wǎng)的配置一下即可
在配置的過(guò)程中出現(xiàn)的問(wèn)題,當(dāng)終端關(guān)閉后再打開(kāi),flutter沒(méi)有默認(rèn)加載,后來(lái)發(fā)現(xiàn)漏掉了一項(xiàng)配置
注意: 如果你使用的是zsh宦赠,終端啟動(dòng)時(shí) ~/.bash_profile 將不會(huì)被加載筒狠,解決辦法就是修改 ~/.zshrc ,在其中添加:source ~/.bash_profile
沒(méi)有使用zsh的電腦不需要配置此項(xiàng)
Dart基礎(chǔ)語(yǔ)法
void main(List<String> args) {
print("hello dart");
// 當(dāng)行注釋
/**
* 多行
* 注釋
*/
// 變量和數(shù)據(jù)類(lèi)型
int age = 23;
double height = 185.5;
String name = "Tom";
bool isValid = true;
//String拼接
String welcome = "welcome ";
String welcomeTom = welcome + name;
print(welcomeTom);
print(name + " heigt is " + height.toString());
print("$name age is $age");
}
// dynamic和Object
/**
* Object 是Dart所有對(duì)象的根基類(lèi),也就是說(shuō)所有類(lèi)型都是Object的子類(lèi)(包括Function和Null),
* 所以任何類(lèi)型的數(shù)據(jù)都可以賦值給Object聲明的對(duì)象. dynamic與var一樣都是關(guān)鍵詞,聲明的變量可以賦值任意對(duì)象。
* 而dynamic與Object相同之處在于,他們聲明的變量可以在后期改變賦值類(lèi)型偏形。
*/
dynamic t;
Object x;
t = "Hello World";
x = "Hello Dart";
t = 100;
x = 200;
/**
* dynamic與Object不同的是,dynamic聲明的對(duì)象編譯器會(huì)提供所有可能的組合,
* 而Object聲明的對(duì)象只能使用Object的屬性與方法, 否則編譯器會(huì)報(bào)錯(cuò)
* dynamic的這個(gè)特性與Objective-C中的id作用很像.
* dynamic的這個(gè)特點(diǎn)使得我們?cè)谑褂盟鼤r(shí)需要格外注意,這很容易引入一個(gè)運(yùn)行時(shí)錯(cuò)誤.
*/
// final和const
/**
* 如果您從未打算更改一個(gè)變量,那么使用 final 或 const觉鼻,不是var俊扭,也不是一個(gè)類(lèi)型。
* 一個(gè) final 變量只能被設(shè)置一次坠陈,
* 兩者區(qū)別在于:const 變量是一個(gè)編譯時(shí)常量萨惑,final變量在第一次使用時(shí)被初始化。
* 被final或者const修飾的變量仇矾,變量類(lèi)型可以省略庸蔼,如:
*/
//可以省略String這個(gè)類(lèi)型聲明
final str = "hi world";
//final String str = "hi world";
const str1 = "hi world";
//const String str1 = "hi world";
控制語(yǔ)句
// 條件控制語(yǔ)句
var salary = 2000;
if (salary < 2000) {
print("$salary 小于 2000");
} else if (salary == 2000) {
print("$salary 等于 2000");
} else {
print("$salary 大于 2000");
}
int a = 20;
int b = 30;
if (a < b) {
print("$a 小于 $b");
} else {
print("$a 大于 $b");
}
// ?: 表達(dá)式
a < b ? print("$a 小于 $b") : print("$a 大于 $b");
// ?? 表達(dá)式
String people = "Tom";
String people2 = people ?? "Jack";
print(people2);
// Switch
String grade = "A";
switch (grade) {
case "A":
print("vary good");
break;
case "B":
print("good");
break;
case "C":
print("bad");
break;
default:
print("error");
}
循環(huán)遍歷
// 循環(huán)語(yǔ)句
// for循環(huán)
for (var i = 0; i < 10; i++) {
print(i);
}
// for in 循環(huán)
List arr = ["A", "B", "C"];
for (var item in arr) {
print(item);
}
// while
int i = 5;
while (i > 0) {
print("while i $i");
i--;
}
// do while
int j = 5;
do {
print("do while j $j");
j--;
} while (j > 0);
print("i: $i, j: $j");
函數(shù)
// 1.定義最簡(jiǎn)單的函數(shù)
void sumValue1() {
int a = 1;
int b = 1;
int sum = a + b;
print(sum);
}
// 2.函數(shù)傳參
void sumValue2(int a, int b) {
int sum = a + b;
print(sum);
}
// 3.函數(shù)返回值
int sumValue3(int a, int b) {
int sum = a + b;
return sum;
}
// 4.函數(shù)默認(rèn)返回值
int sumValue4(int a, int b) {
int sum = a + b;
}
// 5.箭頭函數(shù)(無(wú)返回值)
void sumValue5(int a, int b) => print(" a + b = ${a + b}");
// 6.箭頭函數(shù)(有返回值)
int sumValue6(int a, int b) => a + b;
// 7.函數(shù)參數(shù)(可選參數(shù))
void printCities (String name1, [String name2, String name3]) {
print("name1 is $name1");
print("name2 is $name2");
print("name3 is $name3");
}
// 8.函數(shù)參數(shù) 命名
void findVolume({int length, int height, int width}) {
print("length is $length");
print("height is $height");
print("width is $width");
}
// 9.函數(shù)參數(shù) 賦默認(rèn)值
void findVolume2({int length, int height = 20, int width}) {
print("length is $length");
print("height is $height");
print("width is $width");
}
// 10.函數(shù)作為參數(shù)傳遞
void execute(var callback) {
callback();
}
// 調(diào)用
execute(() => print("xxx"));
深入學(xué)習(xí)語(yǔ)法可參考Dart官方教程
這里只是做一個(gè)入門(mén)的語(yǔ)法學(xué)習(xí),接下來(lái)會(huì)在flutter實(shí)際開(kāi)發(fā)中邊做邊深度學(xué)習(xí).
我們可以看出,Dart語(yǔ)法與swift或者C語(yǔ)言的語(yǔ)法相似,有了其他語(yǔ)言的基礎(chǔ),基本上可以輕松上手