真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

flutter詳解,flutter筆記

Flutter進(jìn)階篇(4)-- Flutter的Future異步詳解

本文首發(fā)在公眾號(hào) Flutter那些事 ,歡迎大家多多關(guān)注。

創(chuàng)新互聯(lián)公司是專業(yè)的鄱陽(yáng)網(wǎng)站建設(shè)公司,鄱陽(yáng)接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鄱陽(yáng)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

工具安裝:

Flutter基礎(chǔ)篇:

Flutter進(jìn)階篇:

Dart語(yǔ)法基礎(chǔ)篇:

Dart語(yǔ)法進(jìn)階篇:

說(shuō)明:本文中的所有函數(shù)的引用在 main 函數(shù)中:

這里的執(zhí)行結(jié)果是:

Futue直接new就可以了。我這里沒(méi)有具體的返回?cái)?shù)據(jù),所以就用匿名函數(shù)代替了, Future future = new Future(() = null); 相當(dāng)于 FutureNull future = new Future(() = null); 泛型如果為null可以省略不寫(xiě),為了便于維護(hù)和管理,開(kāi)發(fā)中建議加上泛型。

輸出結(jié)果是:

future里面有幾個(gè)函數(shù):

then :異步操作邏輯在這里寫(xiě)。

whenComplete :異步完成時(shí)的回調(diào)。

catchError :捕獲異?;蛘弋惒匠鲥e(cuò)時(shí)的回調(diào)。

因?yàn)檫@里面的異步操作過(guò)程中沒(méi)有遇到什么錯(cuò)誤,所以catchError回調(diào)不會(huì)調(diào)用。

我們可以看到執(zhí)行結(jié)果是:

我們可以看到輸出結(jié)果是: 2 1 3 和我們創(chuàng)建Future對(duì)象的先后順序完全一致。

我們可以看到結(jié)果為 1 2 3 ,和我們調(diào)用then的先后順序無(wú)關(guān)。:

當(dāng)then回調(diào)函數(shù)里面還有then回調(diào)的時(shí)候,這時(shí)候的流程跟前面就不太一樣了,也是一個(gè)大坑,也是面試經(jīng)常會(huì)被問(wèn)到的一個(gè)知識(shí)點(diǎn)。

我們可以看到執(zhí)行結(jié)果如下:

結(jié)果還是一樣的:

運(yùn)行結(jié)果是:

這里再次證明了上面我的猜想: 執(zhí)行順序和和創(chuàng)建Future的先后順序有關(guān),如果有多個(gè)then嵌套執(zhí)行,先執(zhí)行外面的then,然后執(zhí)行里面的then。

執(zhí)行結(jié)果如下,我們可以看到then內(nèi)部創(chuàng)建的Future要等到then執(zhí)行完了,最后再去執(zhí)行的:

根據(jù)上文總結(jié)的特點(diǎn),我們可以不用運(yùn)行也能推斷出輸出結(jié)果:

為了驗(yàn)證我們的猜想,我們打印一下輸出結(jié)果,果然我們的證明是正確的。

我們重點(diǎn)看看 then函數(shù)的文檔說(shuō)明:

then 注冊(cè)在 Future 完成時(shí)調(diào)用的回調(diào)。

當(dāng)這個(gè) Future 用一個(gè) value 完成時(shí),將使用該值調(diào)用 onValue 回調(diào)。

如果 Future 已經(jīng)完成,則不會(huì)立即調(diào)用回調(diào),而是將在稍后的 microtask(微任務(wù)) 中調(diào)度。

如果回調(diào)返回 Future ,那么 then 返回的 future 將與 callback 返回的 future 結(jié)果相同。

onError 回調(diào)必須接受一個(gè)參數(shù)或兩個(gè)參數(shù),后者是[StackTrace]。

如果 onError 接受兩個(gè)參數(shù),則使用錯(cuò)誤和堆棧跟蹤時(shí)調(diào)用它,否則僅使用錯(cuò)誤對(duì)象時(shí)候調(diào)用它。

onError 回調(diào)必須返回一個(gè)可用于完成返回的future的值或future,因此它必須是可賦值給 FutureOr R 的東西。

返回一個(gè)新的 Future ,該 Future 是通過(guò)調(diào)用 onValue (如果這個(gè)Future是通過(guò)一個(gè)value完成的)或' onError (如果這個(gè)Future是通過(guò)一個(gè)error完成的)的結(jié)果完成的。

如果調(diào)用的回調(diào)拋出異常,返回的 future 將使用拋出的錯(cuò)誤和錯(cuò)誤的堆棧跟蹤完成。在 onError 的情況下,如果拋出的異常與 onError 的錯(cuò)誤參數(shù)“相同(identical)”,則視為重新拋出,并使用原始堆棧跟蹤替代

如果回調(diào)返回 Future ,則 then 返回的 Future 將以與回調(diào)返回的 Future 相同的結(jié)果完成。

如果未給出 onError ,并且后續(xù)程序走了剛出現(xiàn)了錯(cuò)誤,則錯(cuò)誤將直接轉(zhuǎn)發(fā)給返回的 Future 。

在大多數(shù)情況下,單獨(dú)使用 catchError 更可讀,可能使用 test 參數(shù),而不是在單個(gè) then 調(diào)用中同時(shí)處理 value 和 error 。

請(qǐng)注意,在添加監(jiān)聽(tīng)器(listener)之前, future 不會(huì)延遲報(bào)告錯(cuò)誤。如果第一個(gè) then 或 catchError 調(diào)用在 future 完成后發(fā)生 error ,那么 error 將報(bào)告為未處理的錯(cuò)誤。

Flutter 布局 - Container詳解

Container的組成如下:

- width? 和? height :寬和高。

- color :背景色,值為一個(gè) Color 對(duì)象,不能與 decoration 屬性同時(shí)設(shè)置。

-? margin :外邊距,值為一個(gè) EdgeInsets 對(duì)象。EdgeInsets 對(duì)象即可調(diào)用EdgeInsets.all() 方法統(tǒng)一設(shè)置左上右下四條邊的邊距,也可以調(diào)用 EdgeInsets.fromLTRB() 分別設(shè)置左上右下四條邊的邊距。

-? padding :內(nèi)間距,值同 margin。

-? alignment :元素對(duì)齊方式

-? decoration :裝飾、背景顏色、邊框、背景圖片、等,不能與 color 屬性同時(shí)設(shè)置

-? child :子組件

-參數(shù) alignment:

topCenter :頂部居中對(duì)齊???? topLeft :頂部左對(duì)齊????? topRight :頂部右對(duì)齊 ???? center :水平垂直居中對(duì)齊 ???? centerLeft :垂直居中水平居左對(duì)齊 ???? centerRight :垂直居中水平居右對(duì)齊 ???? bottomCenter 底部居中對(duì)齊???? bottomLeft :底部居左對(duì)齊???? bottomRight :底部居右對(duì)齊

-參數(shù)?decoration :

Container參數(shù)的使用如下:

Flutter TextField 文本輸入框的基本屬性及詳解

源碼分析:

分析源碼可得,TextField 是有狀態(tài) StatefulWidget,有豐富的屬性,自定義化較高,實(shí)踐中需要合理利用各種回調(diào);

1、光標(biāo)的相關(guān)屬性;cursorColor 為光標(biāo)顏色,cursorWidth 為光標(biāo)寬度,cursorRadius 為光標(biāo)圓角;其中 Radius 提供了 circle 圓角和 elliptical 非圓角兩種;

2、textAlign 為文字起始位置,可根據(jù)業(yè)務(wù)光標(biāo)居左/居右/居中等;注意只是文字開(kāi)始方向;textDirection 問(wèn)文字內(nèi)容方向,從左向右或從右向左;

3、maxLength 為字符長(zhǎng)度,設(shè)置時(shí)默認(rèn)是展示一行,且右下角有編輯長(zhǎng)度與整體長(zhǎng)度對(duì)比;與 maxLengthEnforced 配合,maxLengthEnforced 為 true 時(shí)達(dá)到最大字符長(zhǎng)度后不可編輯;為 false 時(shí)可繼續(xù)編輯展示有差別;

4、設(shè)置 maxLength 之后右下角默認(rèn)有字符計(jì)數(shù)器,設(shè)置 TextField.noMaxLength 即可只展示輸入字符數(shù);

5、maxLines 為允許展現(xiàn)的最大行數(shù),在使用 maxLength 時(shí)內(nèi)容超過(guò)一行不會(huì)自動(dòng)換行,因?yàn)槟J(rèn) maxLines=1,此時(shí)設(shè)置為 null 或固定展示行數(shù)即可自動(dòng)換行;區(qū)別在于 null 會(huì)展示多行,而 maxLines 最多只展示到設(shè)置行數(shù);

6、obscureText 是否隱藏編輯內(nèi)容,常見(jiàn)的密碼格式;

7、enableInteractiveSelection 長(zhǎng)按是否出現(xiàn)【剪切/復(fù)制/粘貼】菜單;不可為空;

8、keyboardAppearance 為鍵盤(pán)亮度,包括 Brightness.dark/light 兩種,但僅限于 iOS 設(shè)備;

9、textCapitalization 文字大小寫(xiě);理論上 sentences 為每句話第一個(gè)字母大寫(xiě);characters為每個(gè)字母大寫(xiě);words 為每個(gè)單詞首字母大寫(xiě);但該屬性僅限于 text keybord,和尚在本地更換多種方式并未實(shí)現(xiàn),有待研究;

10、keyboardType 為鍵盤(pán)類(lèi)型,和尚理解整體分為數(shù)字鍵盤(pán)和字母鍵盤(pán)等;根據(jù)設(shè)置的鍵盤(pán)類(lèi)型,鍵盤(pán)會(huì)有差別;

a. 數(shù)字鍵盤(pán)

--1-- datetime 鍵盤(pán)上可隨時(shí)訪問(wèn) : 和 /;

--2-- phone 鍵盤(pán)上可隨時(shí)訪問(wèn) # 和 *;

--3-- number 鍵盤(pán)上可隨時(shí)訪問(wèn) + - * /

b. 字母鍵盤(pán)

--1-- emailAddress 鍵盤(pán)上可隨時(shí)訪問(wèn) @ 和 .;

--2-- url 鍵盤(pán)上可隨時(shí)訪問(wèn) / 和 .;

--3-- multiline 適用于多行文本換行;

--4-- text 默認(rèn)字母鍵盤(pán);

11、textInputAction 通常為鍵盤(pán)右下角操作類(lèi)型,類(lèi)型眾多,建議多多嘗試;

12、autofocus 是否自動(dòng)獲取焦點(diǎn),進(jìn)入頁(yè)面優(yōu)先獲取焦點(diǎn),并彈出鍵盤(pán),若頁(yè)面中有多個(gè) TextField 設(shè)置 autofocus 為 true 則優(yōu)先獲取第一個(gè)焦點(diǎn);

13、focusNode 手動(dòng)獲取焦點(diǎn),可配合鍵盤(pán)輸入等減少用戶操作次數(shù),直接獲取下一個(gè) TextField 焦點(diǎn);

14、enabled 設(shè)為 false 之后 TextField 為不可編輯狀態(tài);

15、decoration 為邊框修飾,可以借此來(lái)調(diào)整 TextField 展示效果;可以設(shè)置前置圖標(biāo),后置圖片,邊框?qū)傩?,?nèi)容屬性等,會(huì)在后續(xù)集中嘗試;若要完全刪除裝飾,將 decoration 設(shè)置為空即可;

16、inputFormatters 為格式驗(yàn)證,例如原生 Android 中通常會(huì)限制輸入手機(jī)號(hào)或其他特殊字符,在 Flutter 中也可以借此來(lái)進(jìn)行格式限制,包括正則表達(dá)式;使用時(shí)需要引入 package:flutter/services.dart;

a. LengthLimitingTextInputFormatter 限制最長(zhǎng)字符;

b. WhitelistingTextInputFormatter 僅允許輸入白名單中字符;如 digitsOnly 僅支持?jǐn)?shù)字 [0-9];

c. BlacklistingTextInputFormatter 防止輸入黑名單中字符;如 singleLineFormatter 強(qiáng)制輸入單行;

分析源碼 RegExp("[/]") 可以設(shè)置正則表達(dá)式;

17、onChanged 文本內(nèi)容變更時(shí)回調(diào),可實(shí)時(shí)監(jiān)聽(tīng) TextField 輸入內(nèi)容;

18、controller 文本控制器,監(jiān)聽(tīng)輸入內(nèi)容回調(diào);

19、onTap 點(diǎn)擊 TextField時(shí)回調(diào);

20、onEditingComplete 在提交內(nèi)容時(shí)回調(diào),通常是點(diǎn)擊回車(chē)按鍵時(shí)回調(diào);

21、onSubmit 在提交時(shí)回調(diào),不可與 onEditingComplete 同時(shí)使用,區(qū)別在于 onSubmit 是帶返回值的回調(diào);

問(wèn)題小結(jié):

當(dāng) TextField 設(shè)置 enableInteractiveSelection 屬性后長(zhǎng)按會(huì)出現(xiàn)菜單,默認(rèn)為英文,可通過(guò)設(shè)置 Flutter 國(guó)際化來(lái)處理;

(1)在 pubspec.yaml 中集成 flutter_localizations;

2)在 MaterialApp 中設(shè)置本地化代理和支持的語(yǔ)言類(lèi)型;

(1)將 maxLength 設(shè)置為 null 僅使用 LengthLimitingTextInputFormatter 限制最長(zhǎng)字符;

(2)設(shè)置 InputDecoration 中 decoration 屬性為空;但是底部有空余,只是隱藏而并非消失;

Flutter-channel詳解

BinaryMessenger是Platform端與Flutter端通信的工具,其通信使用的消息格式為二進(jìn)制格式數(shù)據(jù)。當(dāng)我們初始化一個(gè)Channel,并向該Channel注冊(cè)處理消息的Handler時(shí),實(shí)際上會(huì)生成一個(gè)與之對(duì)應(yīng)的BinaryMessageHandler,并以channel name為key,注冊(cè)到BinaryMessenger中。當(dāng)Flutter端發(fā)送消息到BinaryMessenger時(shí),BinaryMessenger會(huì)根據(jù)其入?yún)hannel找到對(duì)應(yīng)的BinaryMessageHandler,并交由其處理。

Binarymessenger在Android端是一個(gè)接口,其具體實(shí)現(xiàn)為FlutterNativeView。而其在iOS端是一個(gè)協(xié)議,名稱為FlutterBinaryMessenger,F(xiàn)lutterViewController遵循了它。

參考閑魚(yú)技術(shù)出品

深入理解Flutter Platform Channel

在Native側(cè),創(chuàng)建一個(gè)methodChannel通道,用于調(diào)用flutter側(cè)方法,或者flutter側(cè)調(diào)用Native側(cè)方法,并提供callback。

iOS側(cè):

關(guān)鍵詞:

channelName:channel唯一標(biāo)識(shí),Native側(cè)和flutter側(cè)保持名稱一致。

binaryMessenger:channel Context。

handle: typedef void (^FlutterMethodCallHandler)(FlutterMethodCall* call, FlutterResult result);

FlutterMethodCall:包含 method (方法名)和 arguments (參數(shù))的對(duì)象,管理方法對(duì)象

FlutterResult: typedef void (^FlutterResult)(id _Nullable result);

Android側(cè):

關(guān)鍵詞:

binaryMessenger:傳入flutter Context,及FlutterNativeView。

flutter側(cè):

關(guān)鍵詞:

Future、async:異步操作套裝

Future-官方文檔

setState:觸發(fā)重繪當(dāng)前節(jié)點(diǎn),以更新UI。

Flutter組件Container詳解

Container是Flutter里很常用的一個(gè)組件,類(lèi)似于html中的div。

如圖所示,和div一樣,container也可以設(shè)置寬度(width)、高度(heigth)、內(nèi)邊距(padding)、外邊距(margin)、邊框(border)。

常用屬性講解

width:容器的寬度

heigth:容器的高度

color:容器的背景色

效果如圖

padding:內(nèi)邊距

margin:外邊距

詳解flutter中本地資源圖片的使用

一. flutter中我們想加載本地圖片,需要兩步:

二. flutter項(xiàng)目中本地圖片加載的原理

在加載圖片時(shí),系統(tǒng)自動(dòng)會(huì)根據(jù)屏幕分辨率優(yōu)先選擇到符合自己分配率的文件夾(2.0x或者3.0x或者4.0x)下去取相對(duì)應(yīng)的圖片,如果當(dāng)前文件夾下沒(méi)有,則會(huì)到低一倍的文件夾下去,如果還沒(méi)有,則繼續(xù)向更低一倍去取。(比如:iOS 5.5英寸及以上屏幕會(huì)優(yōu)先選擇去3.0x下去取圖片,如果3.0x不存在或者3.0x文件夾下沒(méi)有,則去2.0x下??;如果2.0x不存在或者2.0x下沒(méi)有,則去1.0x下取;1.0x下再?zèng)]有,則在images文件下取)。


標(biāo)題名稱:flutter詳解,flutter筆記
當(dāng)前鏈接:http://weahome.cn/article/hocpoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部