duwen vor 7 Jahren
Ursprung
Commit
29f796ef2b

+ 2 - 58
.idea/libraries/Dart_Packages.xml

@@ -68,7 +68,7 @@
         <entry key="cookie_jar">
           <value>
             <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-0.0.1/lib" />
+              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-0.0.3/lib" />
             </list>
           </value>
         </entry>
@@ -100,13 +100,6 @@
             </list>
           </value>
         </entry>
-        <entry key="dartdoc">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/git/dartdoc-377b47426abbb561d89663c93467bc0dca02109f/lib" />
-            </list>
-          </value>
-        </entry>
         <entry key="front_end">
           <value>
             <list>
@@ -191,13 +184,6 @@
             </list>
           </value>
         </entry>
-        <entry key="markdown">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/markdown-1.1.1/lib" />
-            </list>
-          </value>
-        </entry>
         <entry key="matcher">
           <value>
             <list>
@@ -226,13 +212,6 @@
             </list>
           </value>
         </entry>
-        <entry key="mustache4dart">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/mustache4dart-2.1.1/lib" />
-            </list>
-          </value>
-        </entry>
         <entry key="node_preamble">
           <value>
             <list>
@@ -282,27 +261,6 @@
             </list>
           </value>
         </entry>
-        <entry key="quiver">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/quiver-0.27.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="quiver_hashcode">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/quiver_hashcode-1.0.0/lib" />
-            </list>
-          </value>
-        </entry>
-        <entry key="resource">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/resource-2.1.2/lib" />
-            </list>
-          </value>
-        </entry>
         <entry key="shelf">
           <value>
             <list>
@@ -387,13 +345,6 @@
             </list>
           </value>
         </entry>
-        <entry key="tuple">
-          <value>
-            <list>
-              <option value="$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/tuple-1.0.1/lib" />
-            </list>
-          </value>
-        </entry>
         <entry key="typed_data">
           <value>
             <list>
@@ -440,7 +391,6 @@
     </properties>
     <CLASSES>
       <root url="file://$USER_HOME$/.pub-cache/git/dart-codecov-b79c65d8df617495df7c42fd752efabf33c70c92/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/git/dartdoc-377b47426abbb561d89663c93467bc0dca02109f/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/analyzer-0.31.2-alpha.1/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/args-0.13.7/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/async-1.13.3/lib" />
@@ -450,7 +400,7 @@
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/cli_util-0.1.2+1/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/collection-1.14.6/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/convert-2.0.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-0.0.1/lib" />
+      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/cookie_jar-0.0.3/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/coverage-0.9.3/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/crypto-2.0.2+1/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/csslib-0.14.1/lib" />
@@ -466,12 +416,10 @@
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/json_rpc_2-2.0.7/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/kernel-0.3.0-alpha.11/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/logging-0.11.3+1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/markdown-1.1.1/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/matcher-0.12.1+4/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/meta-1.1.2/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/mime-0.9.5/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/multi_server_socket-1.0.1/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/mustache4dart-2.1.1/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/node_preamble-1.4.0/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/package_config-1.0.3/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/package_resolver-1.0.2/lib" />
@@ -479,9 +427,6 @@
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/plugin-0.2.0+2/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/pool-1.3.4/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/pub_semver-1.3.7/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/quiver-0.27.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/quiver_hashcode-1.0.0/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/resource-2.1.2/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/shelf-0.7.2/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/shelf_packages_handler-1.0.3/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/shelf_static-0.2.7/lib" />
@@ -494,7 +439,6 @@
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/string_scanner-1.0.2/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/term_glyph-1.0.0/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/test-0.12.34/lib" />
-      <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/tuple-1.0.1/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/typed_data-1.1.5/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/utf-0.9.0+3/lib" />
       <root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/vm_service_client-0.2.4+1/lib" />

Datei-Diff unterdrückt, da er zu groß ist
+ 267 - 337
.idea/workspace.xml


+ 3 - 3
README.md

@@ -37,7 +37,7 @@ print(response.data);
 
 - [Handling Errors](#handling-errors)
 
-- [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format)
+- [Using application/x-www-form-urlencoded format](#using-application/x-www-form-urlencoded-format)
 
 - [Sending FormData](#sending-formdata)
 
@@ -493,11 +493,11 @@ There is a complete example [here](https://github.com/wendux/dio/tree/master/exa
 
 ## Cookie Manager
 
-You can manage the request/response cookies using `cookieJar` .
+You can manage the request/response cookies using `cookieJar` .  
 
 > The dio cookie manage API is based on the withdrawn [cookie_jar](https://github.com/flutterchina/cookie_jar). 
 
-You can create a `DefaultCookieJar` or `PersistCookieJar` to manage cookies automaticlly, the example codes as follows:
+You can create a `CookieJar` or `PersistCookieJar` to manage cookies automaticlly, and dio use the  `CookieJar` by default, which saves the cookies **in RAM**. If you want to persists cookies,  you can use the `PersistCookieJar` class,  the example codes as follows:
 
 ```dart
 var dio = new Dio();

+ 29 - 0
doc/custom.html

@@ -0,0 +1,29 @@
+<div id="xx" style="display: none; padding-right: 30px">
+    <a href="https://flutterchina.club">Flutter 中文网</a>
+    <a href="https://github.com/flutterchina">GitHub</a>
+</div>
+<style>
+    #xx{
+        padding-right: 30px;
+        top: 3px;
+        position: relative;
+    }
+    #xx a{
+        margin-left: 20px;
+    }
+    blockquote{
+        background: #f5f5f5;
+        border-left: #eee 3px solid;
+        margin: 10px 0;
+        padding: 16px 16px 1px 16px;
+    }
+</style>
+<script>
+ $(function () {
+     $("form").prepend($("#xx").show())
+     $("h2").each(function(e){
+         $(this).attr("id",$(this).text().toLowerCase().replace(/\s/g,"-"))
+     })
+ })
+</script>
+

+ 27 - 27
example/requestInterceptors.dart

@@ -3,7 +3,7 @@ import 'package:dio/dio.dart';
 main() async {
   Dio dio = new Dio();
   dio.options.baseUrl = "http://www.dtworkroom.com/doris/1/2.0.0/";
-  dio.interceptor.request.onSend = (Options options) async {
+  dio.interceptor.request.onSend = (Options options){
     switch (options.path) {
       case "/fakepath1":
         return dio.resolve("fake data");
@@ -18,38 +18,38 @@ main() async {
             message: "test error");
       case "/test?tag=1":
         {
-          Response response = await dio.get("/token");
-          options.headers["token"] = response.data["data"]["token"];
+          //Response response = await dio.get("/token");
+          //options.headers["token"] = response.data["data"]["token"];
           return options;
         }
       default:
         return options; //continue
     }
   };
-  Response
-  response = await dio.get("/fakepath1");
-  assert(response.data == "fake data");
-  response = await dio.get("/fakepath2");
-  assert(response.data["errCode"] == 0);
-
-  try {
-    response = await dio.get("/fakepath3");
-  } on DioError catch (e) {
-    assert(e.message == "test error");
-    assert(e.response == null);
-  }
-  try {
-    response = await dio.get("/fakepath4");
-  } on DioError catch (e) {
-    assert(e.message == "test error");
-    assert(e.response == null);
-  }
-  response = await dio.get("/test");
-  assert(response.data["errCode"] == 0);
-
-  response = await dio.get("/test?tag=1");
-  assert(response.data["errCode"] == 0);
-
+//  Response
+//  response = await dio.get("/fakepath1");
+//  assert(response.data == "fake data");
+//  response = await dio.get("/fakepath2");
+//  assert(response.data["errCode"] == 0);
+//
+//  try {
+//    response = await dio.get("/fakepath3");
+//  } on DioError catch (e) {
+//    assert(e.message == "test error");
+//    assert(e.response == null);
+//  }
+//  try {
+//    response = await dio.get("/fakepath4");
+//  } on DioError catch (e) {
+//    assert(e.message == "test error");
+//    assert(e.response == null);
+//  }
+//  response = await dio.get("/test");
+//  assert(response.data["errCode"] == 0);
+//
+//  response = await dio.get("/test?tag=1");
+//  assert(response.data["errCode"] == 0);
+//
   try {
     await dio.get("https://wendux.github.io/xsddddd");
   } on DioError catch (e) {

+ 40 - 49
lib/src/Dio.dart

@@ -1,8 +1,7 @@
 import 'dart:async';
 import 'dart:io';
+import 'package:cookie_jar/cookie_jar.dart';
 import 'package:dio/src/CancelToken.dart';
-import 'package:cookie_jar/src/CookieJar.dart';
-import 'package:cookie_jar/src/DefaultCookieJar.dart';
 import 'package:dio/src/FormData.dart';
 import 'package:dio/src/DioError.dart';
 import 'package:dio/src/Interceptor.dart';
@@ -40,7 +39,9 @@ class Dio {
   /// Default Request config. More see [Options] .
   Options options;
 
-  CookieJar cookieJar=new DefaultCookieJar();
+  /// Cookie manager for http requests。Learn more details about
+  /// CookieJar please refer to [cookie_jar](https://github.com/flutterchina/cookie_jar)
+  CookieJar cookieJar = new CookieJar();
 
   /// [Dio] will create new HttpClient when it is needed.
   /// If [onHttpClientCreate] is provided, [Dio] will call
@@ -111,9 +112,9 @@ class Dio {
   /// Assure the final future state is succeed!
   Future<Response> resolve(response) {
     if (response is! Future) {
-      response = new Future.value(response);
+       response=new Future<Response>.value(_assureResponse(response));
     }
-    return response.then((data) {
+    return response.then<Response>((data) {
       return _assureResponse(data);
     }, onError: (err) {
       // transform "error" to "success"
@@ -124,9 +125,9 @@ class Dio {
   /// Assure the final future state is failed!
   Future<Response> reject(err) {
     if (err is! Future) {
-      err = new Future.error(err);
+      err = new Future<Response>.error(err);
     }
-    return err.then((v) {
+    return err.then<Response>((v) {
       // transform "success" to "error"
       throw _assureDioError(v);
     }, onError: (e) {
@@ -295,31 +296,31 @@ class Dio {
       InterceptorCallback preSend = interceptor.request.onSend;
       if (preSend != null) {
         _checkCancelled(cancelToken);
-        var ret = preSend(options);
+        var  ret = preSend(options);
         // Assure the return value type of request interceptor is `Future`.
         if (ret is! Future) {
-          ret = new Future.value(ret);
+          ret = new Future<dynamic>.value(ret);
         }
-        return ret.then((_options) {
-          options.method = options.method.toUpperCase();
-          // If the Future value type is Options, continue the network request.
-          if (_options is Options) {
+        Future<Response> future;
+        if(ret is Future<dynamic>){
+          future= ret.then<Response>((_options){
+             if (_options is Error) {
+               throw _assureDioError(_options);
+             }
+             return _assureResponse(_options);
+           });
+        } else if(ret is Future<Options>){
+          future=ret.then<Response>((Options _options){
             return _makeRequest(_options, cancelToken, httpClient);
-          } else {
-            // Otherwise, use the Future value as the request result.
-            // If the return type is Error, we should throw it
-            if (_options is Error) {
-              throw _assureDioError(_options);
-            }
-            return _assureResponse(_options);
-          }
-        }).catchError((err) => throw _assureDioError(err));
+          });
+        }
+        return  future.catchError((err) => throw _assureDioError(err));
       } else {
         // If user don't provide the request interceptor, make request directly.
         return _makeRequest(options, cancelToken, httpClient);
       }
     });
-    return _listenCancelForAsyncTask(cancelToken, future).then((d) {
+    return _listenCancelForAsyncTask<Response>(cancelToken, future).then((d) {
       if (cancelToken != null) {
         httpClient.close();
       }
@@ -401,17 +402,17 @@ class Dio {
         if ((response.statusCode >= HttpStatus.OK &&
             response.statusCode < HttpStatus.MULTIPLE_CHOICES) ||
             response.statusCode == HttpStatus.NOT_MODIFIED) {
-          return _listenCancelForAsyncTask(cancelToken, _onSuccess(ret));
+          return _listenCancelForAsyncTask<Response>(cancelToken, _onSuccess(ret));
         } else {
           var err = new DioError(
             response: ret,
             message: 'Http status error [${response.statusCode}]',
             type: DioErrorType.RESPONSE,
           );
-          return _listenCancelForAsyncTask(cancelToken, _onError(err));
+          return _listenCancelForAsyncTask<Response>(cancelToken, _onError(err));
         }
       });
-      return _listenCancelForAsyncTask(cancelToken, future);
+      return _listenCancelForAsyncTask<Response>(cancelToken, future);
     } catch (e) {
       DioError err = _assureDioError(e);
       if (CancelToken.isCancel(err)) {
@@ -422,11 +423,11 @@ class Dio {
         Future<Response> future = _checkIfNeedEnqueue(interceptor.response, () {
           _checkCancelled(cancelToken);
           // Listen in error interceptor.
-          return _listenCancelForAsyncTask(
+          return _listenCancelForAsyncTask<Response>(
               cancelToken, _onError(err));
         });
         // Listen if in the queue.
-        return _listenCancelForAsyncTask(cancelToken, future);
+        return _listenCancelForAsyncTask<Response>(cancelToken, future);
       }
     }
   }
@@ -438,11 +439,11 @@ class Dio {
     }
   }
 
-  Future _listenCancelForAsyncTask(CancelToken cancelToken, Future future) {
-    Completer<HttpClientRequest> completer = new Completer();
+  Future<T> _listenCancelForAsyncTask<T>(CancelToken cancelToken, Future<T>future) {
+    Completer completer = new Completer();
     if (cancelToken != null && cancelToken.cancelError == null) {
       cancelToken.addCompleter(completer);
-      return Future.any([completer.future, future]).then((result) {
+      return Future.any([completer.future, future]).then<T>((result) {
         cancelToken.removeCompleter(completer);
         return result;
       }).catchError((e) {
@@ -484,8 +485,8 @@ class Dio {
   }
 
 // Transform current Future status("success" and "error") if necessary
-  Future _transFutureStatusIfNecessary(Future future) {
-    return future.then((data) {
+  Future<Response> _transFutureStatusIfNecessary(Future future) {
+    return future.then<Response>((data) {
       // Strictly be a DioError instance, but we loos the restrictions
       //if (data is DioError)
       if (data is Error) {
@@ -503,33 +504,23 @@ class Dio {
   Future<Response> _onSuccess(response) {
     if (interceptor.response.onSuccess != null) {
       response = interceptor.response.onSuccess(response) ?? response;
-      if (response is! Future) {
-        // Assure response is a Future
-        response = new Future.value(response);
-      }
-      return _transFutureStatusIfNecessary(response);
     }
-
     if (response is! Future) {
       // Assure response is a Future
-      response = resolve(response);
+      response = new Future<Response>.value(response);
     }
-    return response;
+    return _transFutureStatusIfNecessary(response);
   }
 
   Future<Response> _onError(err) {
+
     if (interceptor.response.onError != null) {
       err = interceptor.response.onError(err) ?? err;
-      if (err is! Future) {
-        // Assure err is a Future
-        err = new Future.error(err);
-      }
-      return _transFutureStatusIfNecessary(err);
     }
     if (err is! Future) {
-      err = new Future.error(err);
+      err = new Future<Response>.error(err);
     }
-    return err;
+    return _transFutureStatusIfNecessary(err);
   }
 
   _mergeOptions(Options opt) {
@@ -553,7 +544,7 @@ class Dio {
     return options;
   }
 
-  _checkIfNeedEnqueue(interceptor, callback()) {
+ Future<Response> _checkIfNeedEnqueue(interceptor, callback()) {
     if (interceptor.locked) {
       return interceptor.enqueue(callback);
     } else {

+ 1 - 1
lib/src/Interceptor.dart

@@ -48,7 +48,7 @@ class _InterceptorBase {
    * [callback] the function  will return a `Future<Response>`
    * @nodoc
    */
-  Future enqueue(Future<Response> callback()) {
+  Future<Response> enqueue(Future<Response> callback()) {
     if (_lock != null) {
       // we use a future as a queue
       return _lock.then((d) => callback());

+ 2 - 2
lib/src/Options.dart

@@ -17,7 +17,7 @@ enum ResponseType {
 /**
  * The Options class describes the http request information and configuration.
  */
-class Options<T> {
+class Options{
   Options({this.method,
     this.baseUrl,
     this.connectTimeout,
@@ -52,7 +52,7 @@ class Options<T> {
   int receiveTimeout;
 
   /// Request data, can be any type.
-  T data;
+  var data;
 
   /// If the `path` starts with "http(s)", the `baseURL` will be ignored, otherwise,
   /// it will be combined and then resolved with the baseUrl.

+ 2 - 2
lib/src/TransFormer.dart

@@ -97,10 +97,10 @@ class DefaultTransformer extends TransFormer {
                 ));
           });
     }
-    var responseBody = await stream.transform(UTF8.decoder).join();
+    String responseBody = await stream.transform(UTF8.decoder).join();
     if (options.responseType == ResponseType.JSON &&
         response.headers.contentType.mimeType == ContentType.JSON.mimeType) {
-      responseBody = JSON.decode(responseBody);
+      return JSON.decode(responseBody);
     }
     return responseBody;
   }

+ 1 - 4
pubspec.yaml

@@ -8,7 +8,7 @@ environment:
   sdk: '>=1.20.1 <2.0.0'
 
 dependencies:
-  cookie_jar: ^0.0.2
+  cookie_jar: ^0.0.3
 
 dev_dependencies:
   test: "^0.12.0"
@@ -16,9 +16,6 @@ dev_dependencies:
   dart_codecov_generator:
     git:
       url: "https://github.com/wendux/dart-codecov.git"
-#  dartdoc:
-#    git:
-#      url: "https://github.com/wendux/dartdoc"
 
 documentation:
 

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.