小編給大家分享一下利用FutureBuilder提高開發(fā)效率的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
我們擁有十多年網(wǎng)頁設(shè)計和網(wǎng)站建設(shè)經(jīng)驗,從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計師為您提供的解決方案。為企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、手機(jī)網(wǎng)站開發(fā)、H5響應(yīng)式網(wǎng)站、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計或者設(shè)計方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計服務(wù)并滿足您的需求。
常見場景
展示請求按鈕
用戶點(diǎn)擊按鈕,顯示loading
展示數(shù)據(jù)或者錯誤
抽象模式
展示請求按鈕(初始狀態(tài))
用戶點(diǎn)擊按鈕,顯示loading(請求中狀態(tài))
展示數(shù)據(jù)或者錯誤 (結(jié)束狀態(tài)(成功或失敗))
轉(zhuǎn)換成程序語言
以上三種現(xiàn)實情況對應(yīng) AsyncSnapshot 三個狀態(tài)
ConnectionState.none 初始態(tài)
ConnectionState.waiting 請求態(tài)
ConnectionState.done 完成態(tài)
snapshot.hasError 完成(異常)
snapshot.hasData 完成(正常)
使用 FutureBuilder 處理這個場景
這篇文章的主角,F(xiàn)utureBuilder 就是為了解決這個問題存在的。它接收一個 Future 請求,和對應(yīng)以上幾種情況的 widget 回調(diào)。即可把數(shù)據(jù)和界面串聯(lián)起來,避免額外聲明僅用來傳遞數(shù)據(jù)用的變量。
提前聲明了一個 _showResult 變量,以表示頁面是否觸發(fā)請求。
并且封裝了一個 _fetch() 網(wǎng)絡(luò)請求。
Future<Map> _fetch() async { return (await Dio().get("https://jsonplaceholder.typicode.com/users/1")) .data; }
請求的結(jié)果是任意的,不管是封裝好的對象,map,list,都可以,只要是一個 Future<T>
把這個 Future 調(diào)用安放到 FutureBuilder 的 future 參數(shù)上, 并用 _showResult 來控制何時來觸發(fā)這個請求。
FutureBuilder( future: _showResult ? _fetch() : null, ... )
再把每一個 Future 的結(jié)果對應(yīng)的 widget 設(shè)置到 builder 參數(shù)上:
FutureBuilder( ... builder: (context, snapshot) { switch (snapshot.connectionState) { case ConnectionState.none: // -------- 初始態(tài) return RaisedButton( onPressed: () { setState(() { _showResult = true; // 點(diǎn)擊按鈕,觸發(fā)請求 }); }, child: Text("start"), ); case ConnectionState.waiting: // -------- 請求態(tài) return CircularProgressIndicator(); case ConnectionState.done: // -------- 完成態(tài) if (snapshot.hasError) { // 異常 return Text( '${snapshot.error}', style: TextStyle(color: Colors.red), ); } else { // 正常 return Text(snapshot.data["name"]); } break; default: break; } return Container(); }, ),
總結(jié)
FutureBuilder 把數(shù)據(jù)請求的 Future<T> 中的數(shù)據(jù) T 通過 Builder 的 ConnectionState 衍生出所有可能性,并在每個可能性里 return 一個 Widgets。最終實現(xiàn)了 state -> UI 的目的
以上是“利用FutureBuilder提高開發(fā)效率的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享名稱:利用FutureBuilder提高開發(fā)效率的方法
本文地址:http://chinadenli.net/article12/ihiddc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)頁設(shè)計公司、、網(wǎng)站導(dǎo)航、微信小程序、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)