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