国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

如何利用FutureBuilder提高開發效率

2020-07-26 02:19:33
字體:
來源:轉載
供稿:網友

常見場景

  • 展示請求按鈕
  • 用戶點擊按鈕,顯示loading
  • 展示數據或者錯誤

抽象模式

  1. 展示請求按鈕(初始狀態)
  2. 用戶點擊按鈕,顯示loading(請求中狀態)
  3. 展示數據或者錯誤 (結束狀態(成功或失敗))

轉換成程序語言

以上三種現實情況對應 AsyncSnapshot 三個狀態

  • ConnectionState.none 初始態
  • ConnectionState.waiting 請求態
  • ConnectionState.done 完成態
    • snapshot.hasError 完成(異常)
    • snapshot.hasData  完成(正常)

使用 FutureBuilder 處理這個場景

這篇文章的主角,FutureBuilder 就是為了解決這個問題存在的。它接收一個 Future 請求,和對應以上幾種情況的 widget 回調。即可把數據和界面串聯起來,避免額外聲明僅用來傳遞數據用的變量。

提前聲明了一個 _showResult 變量,以表示頁面是否觸發請求。

并且封裝了一個 _fetch() 網絡請求。

Future<Map> _fetch() async { return (await Dio().get("https://jsonplaceholder.typicode.com/users/1")) .data;}

請求的結果是任意的,不管是封裝好的對象,map,list,都可以,只要是一個 Future<T>
把這個 Future 調用安放到 FutureBuilder 的 future 參數上, 并用 _showResult 來控制何時來觸發這個請求。

FutureBuilder( future: _showResult ? _fetch() : null, ...)

再把每一個 Future 的結果對應的 widget 設置到 builder 參數上:

FutureBuilder( ... builder: (context, snapshot) {  switch (snapshot.connectionState) {  case ConnectionState.none: // -------- 初始態   return RaisedButton(   onPressed: () {    setState(() {    _showResult = true; // 點擊按鈕,觸發請求    });   },   child: Text("start"),   );  case ConnectionState.waiting: // -------- 請求態   return CircularProgressIndicator();  case ConnectionState.done: // -------- 完成態   if (snapshot.hasError) { // 異常   return Text(    '${snapshot.error}',     style: TextStyle(color: Colors.red),   );   } else { // 正常   return Text(snapshot.data["name"]);   }   break;  default:   break;  }  return Container(); }, ),

總結

FutureBuilder 把數據請求的 Future<T> 中的數據 T 通過 Builder 的 ConnectionState 衍生出所有可能性,并在每個可能性里 return 一個 Widgets。最終實現了 state -> UI 的目的

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广丰县| 盐亭县| 香港 | 安仁县| 宝丰县| 财经| 岐山县| 兰溪市| 恩施市| 潍坊市| 宝丰县| 密云县| 湘乡市| 吉安市| 娱乐| 延寿县| 横峰县| 广德县| 黎城县| 枞阳县| 嵊泗县| 平原县| 昆明市| 富民县| 乐业县| 双峰县| 周口市| 龙井市| 宿迁市| 凭祥市| 景泰县| 焦作市| 布拖县| 泾源县| 浦江县| 莫力| 华宁县| 东兴市| 包头市| 盐城市| 顺义区|