<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 網絡操作 ## Dio http庫 通過上一節介紹,我們可以發現直接使用HttpClient發起網絡請求是比較麻煩的,很多事情得我們手動處理,如果再涉及到文件上傳/下載、Cookie管理等就會非常繁瑣。幸運的是,Dart社區有一些第三方http請求庫,用它們來發起http請求將會簡單的多,本節我們介紹一下目前人氣較高的[dio](https://github.com/flutterchina/dio)庫。 > dio是一個強大的Dart Http請求庫,支持Restful API、FormData、攔截器、請求取消、Cookie管理、文件上傳/下載、超時等。 ### 引入 引入dio: ``` dependencies: dio: ^x.x.x #請使用pub上的最新版本 ``` 導入并創建dio實例: ``` import 'package:dio/dio.dart'; Dio dio = new Dio(); ``` 接下來就可以通過 dio實例來發起網絡請求了,注意,一個dio實例可以發起多個http請求,一般來說,APP只有一個http數據源時,dio應該使用單例模式。 ### 示例 發起 `GET` 請求 : ``` Response response; response=await dio.get("/test?id=12&name=wendu") print(response.data.toString()); ``` 對于`GET`請求我們可以將query參數通過對象來傳遞,上面的代碼等同于: ``` response=await dio.get("/test",queryParameters:{"id":12,"name":"wendu"}) print(response); ``` 發起一個 `POST` 請求: ``` response=await dio.post("/test",data:{"id":12,"name":"wendu"}) ``` 發起多個并發請求: ``` response= await Future.wait([dio.post("/info"),dio.get("/token")]); ``` 下載文件: ``` response=await dio.download("https://www.google.com/",_savePath); ``` 發送 FormData: ``` FormData formData = new FormData.from({ "name": "wendux", "age": 25, }); response = await dio.post("/info", data: formData) ``` 如果發送的數據是FormData,則dio會將請求header的`contentType`設為“multipart/form-data”。 通過FormData上傳多個文件: ``` FormData formData = new FormData.from({ "name": "wendux", "age": 25, "file1": new UploadFileInfo(new File("./upload.txt"), "upload1.txt"), "file2": new UploadFileInfo(new File("./upload.txt"), "upload2.txt"), // 支持文件數組上傳 "files": [ new UploadFileInfo(new File("./example/upload.txt"), "upload.txt"), new UploadFileInfo(new File("./example/upload.txt"), "upload.txt") ] }); response = await dio.post("/info", data: formData) ``` 值得一提的是,dio內部仍然使用HttpClient發起的請求,所以代理、請求認證、證書校驗等和HttpClient是相同的,我們可以在`onHttpClientCreate`回調中設置,例如: ``` (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { //設置代理 client.findProxy = (uri) { return "PROXY 192.168.1.2:8888"; }; //校驗證書 httpClient.badCertificateCallback=(X509Certificate cert, String host, int port){ if(cert.pem==PEM){ return true; //證書一致,則允許發送數據 } return false; }; }; ``` 注意,`onHttpClientCreate`會在當前dio實例內部需要創建HttpClient時調用,所以通過此回調配置HttpClient會對整個dio實例生效,如果你想針對某個應用請求單獨的代理或證書校驗策略,可以創建一個新的dio實例即可。 怎么樣,是不是很簡單,除了這些基本的用法,dio還支持請求配置、攔截器等,官方資料比較詳細,故本書不再贅述,詳情可以參考dio主頁:<https://github.com/flutterchina/dio> 。 下一節我們將使用dio實現一個分塊下載器。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看