之後應該會一直更新吧我想。首先 我不表態flutter將來趨勢,java未來也不可能被其餘語言替代依舊會是中國的主導語言。學不學flutter在我的,爭論之後這個有沒有flutter工程師其實意義不大,由於每一年語言都在換,你只有不斷的學才能保持不敗,如今flutter是最合適的一款,想學就慢慢學,過了打遊戲的年紀就學吧~畢竟歲月不饒人,錢還沒夠的時候就努力進化成更好的人。
javascript
去flutter官網下載其最新可用的安裝包,官網地址:https://flutter.io/sdk-archive/#windows java
Dart語言簡介:我感受它跟C#很像,C#:c+java Dart:java+javascript 屬於「雜交水稻」,強不強本身感受到了嘛
編程
1.var:能夠接受任何類型變量,可是爲final
windows
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.函數聲明:就是函數也是對象,方便了async
// 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
ide
// 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唉,不說了,個人~
函數
附:客觀講若是有時間仍是要多學學的,畢竟年輕 最好是兩我的一塊兒共同進步,有也動力,別太累就行,堅持下去,我以爲博客應該會繼續更新下去,至於在編程的路上能走多遠,看心情,隨心而走,儘可能不要讓本身有後悔的事情,你不學錯過那就是一生,固然也不用那麼用力去追趕,跟着興趣走,這樣無負重的前進纔是生活~一塊兒加油~
ui