本文首發(fā)在公眾號 Flutter那些事 ,歡迎大家多多關(guān)注。
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)琿春,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
工具安裝:
Flutter基礎(chǔ)篇:
Flutter進(jìn)階篇:
Dart語法基礎(chǔ)篇:
Dart語法進(jìn)階篇:
說明:本文中的所有函數(shù)的引用在 main 函數(shù)中:
這里的執(zhí)行結(jié)果是:
Futue直接new就可以了。我這里沒有具體的返回數(shù)據(jù),所以就用匿名函數(shù)代替了, Future future = new Future(() = null); 相當(dāng)于 FutureNull future = new Future(() = null); 泛型如果為null可以省略不寫,為了便于維護(hù)和管理,開發(fā)中建議加上泛型。
輸出結(jié)果是:
future里面有幾個函數(shù):
then :異步操作邏輯在這里寫。
whenComplete :異步完成時的回調(diào)。
catchError :捕獲異?;蛘弋惒匠鲥e時的回調(diào)。
因為這里面的異步操作過程中沒有遇到什么錯誤,所以catchError回調(diào)不會調(diào)用。
我們可以看到執(zhí)行結(jié)果是:
我們可以看到輸出結(jié)果是: 2 1 3 和我們創(chuàng)建Future對象的先后順序完全一致。
我們可以看到結(jié)果為 1 2 3 ,和我們調(diào)用then的先后順序無關(guān)。:
當(dāng)then回調(diào)函數(shù)里面還有then回調(diào)的時候,這時候的流程跟前面就不太一樣了,也是一個大坑,也是面試經(jīng)常會被問到的一個知識點。
我們可以看到執(zhí)行結(jié)果如下:
結(jié)果還是一樣的:
運行結(jié)果是:
這里再次證明了上面我的猜想: 執(zhí)行順序和和創(chuàng)建Future的先后順序有關(guān),如果有多個then嵌套執(zhí)行,先執(zhí)行外面的then,然后執(zhí)行里面的then。
執(zhí)行結(jié)果如下,我們可以看到then內(nèi)部創(chuàng)建的Future要等到then執(zhí)行完了,最后再去執(zhí)行的:
根據(jù)上文總結(jié)的特點,我們可以不用運行也能推斷出輸出結(jié)果:
為了驗證我們的猜想,我們打印一下輸出結(jié)果,果然我們的證明是正確的。
我們重點看看 then函數(shù)的文檔說明:
then 注冊在 Future 完成時調(diào)用的回調(diào)。
當(dāng)這個 Future 用一個 value 完成時,將使用該值調(diào)用 onValue 回調(diào)。
如果 Future 已經(jīng)完成,則不會立即調(diào)用回調(diào),而是將在稍后的 microtask(微任務(wù)) 中調(diào)度。
如果回調(diào)返回 Future ,那么 then 返回的 future 將與 callback 返回的 future 結(jié)果相同。
onError 回調(diào)必須接受一個參數(shù)或兩個參數(shù),后者是[StackTrace]。
如果 onError 接受兩個參數(shù),則使用錯誤和堆棧跟蹤時調(diào)用它,否則僅使用錯誤對象時候調(diào)用它。
onError 回調(diào)必須返回一個可用于完成返回的future的值或future,因此它必須是可賦值給 FutureOr R 的東西。
返回一個新的 Future ,該 Future 是通過調(diào)用 onValue (如果這個Future是通過一個value完成的)或' onError (如果這個Future是通過一個error完成的)的結(jié)果完成的。
如果調(diào)用的回調(diào)拋出異常,返回的 future 將使用拋出的錯誤和錯誤的堆棧跟蹤完成。在 onError 的情況下,如果拋出的異常與 onError 的錯誤參數(shù)“相同(identical)”,則視為重新拋出,并使用原始堆棧跟蹤替代
如果回調(diào)返回 Future ,則 then 返回的 Future 將以與回調(diào)返回的 Future 相同的結(jié)果完成。
如果未給出 onError ,并且后續(xù)程序走了剛出現(xiàn)了錯誤,則錯誤將直接轉(zhuǎn)發(fā)給返回的 Future 。
在大多數(shù)情況下,單獨使用 catchError 更可讀,可能使用 test 參數(shù),而不是在單個 then 調(diào)用中同時處理 value 和 error 。
請注意,在添加監(jiān)聽器(listener)之前, future 不會延遲報告錯誤。如果第一個 then 或 catchError 調(diào)用在 future 完成后發(fā)生 error ,那么 error 將報告為未處理的錯誤。
以下主要針對 MethodChannel 這種常用通信方式做詳細(xì)分析。
關(guān)于 MethodChannel 方式相互調(diào)用的流程簡圖如下:
消息的編碼與解碼 MessageCodec ,Dart 和 native 側(cè)分別有四種編碼方式,兩端都是一致的。
無論是 Dart 調(diào)用 Android,還是 Android 調(diào)用 Dart,均使用 invokeMethod() 觸發(fā)調(diào)用 以及 setMethodCallHandler() 監(jiān)聽調(diào)用事件進(jìn)行。
1)調(diào)用 Native 方法 getMessage : MethodChannel.invokeMethod('getMessage')
2)Native 監(jiān)聽方法調(diào)用并執(zhí)行對應(yīng)方法 Native 邏輯
3)如果需要回傳 Native 數(shù)據(jù)給 Dart,則使用:result.success() 傳遞數(shù)據(jù),該結(jié)果直接從上述 invokeMethod() 方法可獲取到。
1)Dart 調(diào)用 Native 方法,Native 側(cè)可以直接使用 MethodChannel.Result 回傳數(shù)據(jù)給 Dart,但是一次通信過程中, result.success() 方法只能調(diào)用一次,否則就會出現(xiàn)以下異常:
解決方法,如果要持續(xù)傳遞 Native 數(shù)據(jù)給 Dart,則直接使用 invokeMethod() 方法,Dart 側(cè)監(jiān)聽到自己方法調(diào)用,再做處理。
本篇主要整理 flutter 中多組件布局用法。
以 Row 為例說明, Column 先省略。
flutter 中的彈性布局,主要使用 Flex 和 Expanded 配合實現(xiàn)。
參考資料:
flutter目前最火的混合開發(fā)技術(shù),作為苦逼的移動開發(fā)人員了解下總是沒有錯的,針對最近自己的學(xué)習(xí),進(jìn)行相關(guān)總結(jié),希望在座的看官,看完此文后,能對flutter移動開發(fā)有個大概的了解,希望能給你開發(fā)flutter帶來個大體的認(rèn)知,由于學(xué)習(xí)接觸時間不過,如有講錯的地方,請在評論區(qū)指出,謝謝;
注:經(jīng)過多重比較,個人覺得AS是比較適合flutter移動開發(fā)的,集成方便,插件支持多,不虧是google大佬的親兒子,安卓開發(fā)人員過渡也比較方便;
程序入口指定,也可以指定為別的widget;
從左往右的功能對應(yīng):
在文章開篇的時候,我有提過,在flutter開發(fā)里面,可謂一切界面皆是widget,對于安卓開發(fā)人員,可以理解為增強版fragment(碎片),基本所有的和界面相關(guān)的實現(xiàn)都在當(dāng)中實現(xiàn)。
說到widget就必須聊到今天一個很重要的主題,StatelessWidget, StatefulWidget,因為大部分界面的實現(xiàn)都需要通過集成他們來實現(xiàn)界面顯示。
注:有前端用flex開發(fā)使用的經(jīng)驗的同學(xué),完全可以參考flex屬性使用。
這兩周面試遇到的算法題,都是需要手寫實現(xiàn),本人算法相當(dāng)菜,面試之前也沒刷題的概念,所以算法答的很不好,下面只簡單說下都遇到了哪些吧。
該問題被問到過三次,應(yīng)該是相當(dāng)高頻的吧,第一次我只想到了下面的第一種方法,面試官很nice,引導(dǎo)著我給出了第二種解決方案
1-2-3-4 交換之后為 2-1-4-3.(基本沒有寫出來,當(dāng)時面試官問我你沒刷題嗎,我實話實話沒刷過)
被問到過兩次,第一次是某公司的技術(shù)負(fù)責(zé)人,人超級好,我第一中解法用的棧實現(xiàn)的,然后就問我時間復(fù)雜度和空間復(fù)雜度是多少,還耐心給我講解這兩個的概念和如何計算,然后又讓我想第二種解法,第二種我寫的是chartAt實現(xiàn),面試官又問時間復(fù)雜度和空間復(fù)雜度是多少,然后讓我再想更優(yōu)的解法,最后在面試官的開導(dǎo)下寫了下面第三種實現(xiàn),特感謝這位面試官。
當(dāng)時大體寫出來了 但是臨界值判斷錯了
當(dāng)時是寫出來了,但是方法很笨,之后去看了下源碼,膜拜啊
就遇到了這五個算法,其中一個出現(xiàn)過三次,一個出現(xiàn)過兩次,覺得自己還是挺幸運的吧。希望大家在找工作前多看看算法吧,這個是面試必問的,而且是手寫實現(xiàn),最近兩天也在看算法,感覺大神們的想法真的太好了,自己是很難想到這些思路的。
1.Handshake error in client(OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:352))
打開~/.ios/Runner.xcworkspace,選擇項目對應(yīng)的證書
然后pod install?
ps:我這邊是通過以上方法解決,但是不確定是通過以上哪一步,預(yù)計是選擇項目證書解決的
2.Cannot find "xcodebuild". Xcode 11.0 or greater is required to develop for iOS.
Could not build the precompiled application for the device.
Error launching application on iPhone7ll.
文章名稱:flutter總結(jié),flutter筆記
分享鏈接:http://chinadenli.net/article32/hophpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、動態(tài)網(wǎng)站、網(wǎng)站排名、小程序開發(fā)、做網(wǎng)站、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)