Flutter第一期 - 初識Flutter

    以後應該會一直更新吧我想。首先 我不表態flutter未來趨勢,java將來也不可能被其他語言替代依舊會是中國的主導語言。學不學flutter在個人,爭論以後這個有沒有flutter工程師其實意義不大,因爲每年語言都在換,你只有不斷的學才能保持不敗,現在flutter是最合適的一款,想學就慢慢學,過了打遊戲的年紀就學吧~畢竟歲月不饒人,錢還沒夠的時候就努力進化成更好的人。

    去flutter官網下載其最新可用的安裝包,官網地址:https://flutter.io/sdk-archive/#windows

    Dart語言簡介:我感覺它跟C#很像,C#:c+java Dart:java+javascript 屬於“雜交水稻”,強不強自己感覺到了嘛

    1.var:可以接受任何類型變量,但是爲final

var t;
t = "hi yun";
// 下面代碼在dart中會報錯,因爲變量t的類型已經確定爲String,// 類型一旦確定後則不能再更改其類型。
t = 10000;

    2.dynamic和Object:一看名字跟C#都一樣一樣的,看來就是想模仿並且超越,區別看代碼一看就明白。

相同:
dynamic t;
Object x;
t = "";
x = "";
//下面代碼沒有問題
t = 1001;
x = 10002;

不同:
dynamic a;
Object b;
main(){
    a = "";
    b = "";
    printLengths();
}

printLengths(){
    // no warning
    print(a.length);
    // warning:
    // The getter 'length' is not defined for the class 'Object'
    print(b.length);
}

    3.final和const: 一個 final 變量只能被設置一次,兩者區別在於:const 變量是一個編譯時常量,final變量在第一次使用時被初始化。被final或者const修飾的變量,變量類型可以省略,如:

//可以省略String這個類型聲明
final str = "yun";
final String str = "yun";
const str1 = "yun";
const String str1 = "yun";

    4.函數聲明:就是函數也是對象,方便了

// 1.函數聲明
bool isNoble(int aaaa){
    return _nobleGases[aaaa]!=null;
}


// 2.dart函數聲明如果沒有顯式聲明返回值類型時會默認當做dynamic處理,注意,函數返回值沒有類型推斷:
typedef bool CALLBACK();

//不指定返回類型,此時默認爲dynamic,不是bool
isNoble(int bbbbb){
    return _nobleGases[bbbbb]!=null;
}

void test(CALLBACK cb){
    print(cb());
}
//報錯,isNoble不是bool類型
test(isNoble);


// 3.對於只包含一個表達式的函數,可以使用簡寫語法
bool isNoble(int cccc)=>_nobleGases{cccc}!=null


// 4.函數作爲變量
var say = (str){
    print(str);
};

say("yun");


// 5.函數作爲參數傳遞
void execute(var callback){
    callback();
}

execute(()=>print("yun"))


// 6.可選的位置參數:這個本人很喜歡 以後感覺這樣寫很舒服~而且感覺以後$這個運算符要用的很多地方了~
String yun(String from,String msg,[String device]){
    var result = '$from say $msg';
    if(device!=null){
        result = '$result with a $device';
    }
    return result;
}


yun('geek','yun');// 結果: geek says yun
yun('geek','yun','heart');// 結果:geek says yun with a heart


// 7.可選的命名參數:這個以後會用的多要會~
void yun({bool yun1,bool yun2}){
    // ......
}

yun(yun1:false,yun2:true);

    5.異步支持:這個等了很多年了,終於有了 不用寫邏輯了,無腦的以結果爲導向去刷新ui完美~所以google起名字也很詩意 Future

// 1.先看看基本寫法:其實比較傷的是這樣寫法是真的不好找啊,也可能是我還沒習慣吧~
Future.delayed(new Duration(seconds: 2), () {
  return "hi yun~";
}).then((data) {
  print(data);
});


// 2.異步任務錯誤捕捉:
Future.delayed(new Duration(seconds: 2), () {
  throw AssertionError("Yun Error");
}).then((data) {
  //執行成功會走到這裏
  print("yun success~");
}).catchError((e) {
  //執行失敗會走到這裏
  print(e);
});


// 3.也可以這樣寫捕捉錯誤:
Future.delayed(new Duration(seconds: 2), () {
  throw AssertionError("yun error~");
}).then((data) {
  print("yun success~");
}, onError: (e) {
  print(e);
});


// 4.Future.whenComplete:在網絡請求前彈出加載對話框,在請求結束後關閉對話框
Future.delayed(new Duration(seconds: 2), () {
  throw AssertionError("yun error~");
}).then((data) {
  //執行成功會走到這裏
  print(data);
}).catchError((e) {
  //執行失敗會走到這裏
  // loading success
  print(e);
}).whenComplete(() {
  //無論成功或失敗都會走到這裏
  // loading success
});


// 5.Future.wait:馬上經典的來了~看仔細了~能省很多代碼
Future.wait([
  // 2秒後返回結果
  Future.delayed(new Duration(seconds: 2), () {
    return "hi ";
  }),
  // 4秒後返回結果
  Future.delayed(new Duration(seconds: 4), () {
    return "yun~";
  })
]).then((results) {
  // 4秒後你會在控制檯中看到“hi yun~”
  print(results[0] + results[1]);
}).catchError((e) {
  print(e);
});


// 6.Async/await:最厲害要來了 以前的邏輯現在全部都變成傳遞值 是不是很舒服~
Future<String> login(String name, String pwd) {
  // 用戶登錄 返回id
};

Future<String> getInfo(String id) {
  // 獲取用戶信息 返回info
};

Future saveInfo(String info) {
  // 保存到本地
};

// 1
login("yun", "lx").then((id) {
  //登錄成功後通過,id獲取用戶信息
  getInfo(id).then((info) {
    //獲取用戶信息後保存
    saveInfo(info).then((yun) {
      //保存用戶信息,接下來執行其它操作
    });
  });
});

// 2
login("yun", "lx").then((id) {
  return getInfo(id);
}).then((info) {
  return saveInfo(info);
}).then((e) {
  //執行接下來的操作
  print(e);
}).catchError((e) {
  //錯誤處理
  print(e);
});

// 3 
task() async {
  try {
    String id = await login("yun", "lx");
    String info = await getInfo(id);
    await saveInfo(info);
    //執行接下來的操作

  } catch (e) {
    //錯誤處理
    print(e);
  }
}


// 7.Stream:常用於會多次讀取數據的異步任務場景,如網絡內容下載、文件讀寫等
Stream.fromFutures([
  Future.delayed(new Duration(seconds: 1), () {
    return "hi yun1";
  }),
  Future.delayed(new Duration(seconds: 2), () {
    throw AssertionError("yun error1");
  }),
  Future.delayed(new Duration(seconds: 3), () {
    return "hi yun3";
  })
]).listen((data) {
  print(data);
}, onError: (e) {
  print(e);
}, onDone: () {});

// 結果:
hi yun1
Assertion failed
hi yun3

    總結:今天說的不多不少,感覺flutter的寫法要有一個過程, 我剛開始的時候也不是很習慣,但是寫習慣了,真的java唉,不說了,我的~

    附:客觀講如果有時間還是要多學學的,畢竟年輕 最好是兩個人一起共同進步,有也動力,別太累就行,堅持下去,我覺得博客應該會繼續更新下去,至於在編程的路上能走多遠,看心情,隨心而走,儘量不要讓自己有後悔的事情,你不學錯過那就是一輩子,當然也不用那麼用力去追趕,跟着興趣走,這樣無負重的前進纔是生活~一起加油~

    haiyun2.png

    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章