Skip to content

Commit

Permalink
update examples
Browse files Browse the repository at this point in the history
  • Loading branch information
wendux committed Mar 8, 2021
1 parent c37e96c commit 18e7844
Show file tree
Hide file tree
Showing 25 changed files with 319 additions and 273 deletions.
22 changes: 11 additions & 11 deletions dio/lib/src/dio_mixin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -617,38 +617,38 @@ abstract class DioMixin implements Dio {
}

// Initiate Http requests
Future<Response<T>> _dispatchRequest<T>(RequestOptions options) async {
var cancelToken = options.cancelToken;
Future<Response<T>> _dispatchRequest<T>(RequestOptions reqOpt) async {
var cancelToken = reqOpt.cancelToken;
ResponseBody responseBody;
try {
var stream = await _transformData(options);
var stream = await _transformData(reqOpt);
responseBody = await httpClientAdapter.fetch(
options,
reqOpt,
stream,
cancelToken?.whenCancel,
);
responseBody.headers = responseBody.headers;
var headers = Headers.fromMap(responseBody.headers);
var ret = Response(
headers: headers,
request: options,
request: reqOpt,
redirects: responseBody.redirects ?? [],
isRedirect: responseBody.isRedirect,
statusCode: responseBody.statusCode,
statusMessage: responseBody.statusMessage,
extra: responseBody.extra,
);
var statusOk = options.validateStatus(responseBody.statusCode);
if (statusOk || options.receiveDataWhenStatusError == true) {
var statusOk = reqOpt.validateStatus(responseBody.statusCode);
if (statusOk || reqOpt.receiveDataWhenStatusError == true) {
var forceConvert = !(T == dynamic || T == String) &&
!(options.responseType == ResponseType.bytes ||
options.responseType == ResponseType.stream);
!(reqOpt.responseType == ResponseType.bytes ||
reqOpt.responseType == ResponseType.stream);
String? contentType;
if (forceConvert) {
contentType = headers.value(Headers.contentTypeHeader);
headers.set(Headers.contentTypeHeader, Headers.jsonContentType);
}
ret.data = await transformer.transformResponse(options, responseBody);
ret.data = await transformer.transformResponse(reqOpt, responseBody);
if (forceConvert) {
headers.set(Headers.contentTypeHeader, contentType);
}
Expand All @@ -667,7 +667,7 @@ abstract class DioMixin implements Dio {
);
}
} catch (e) {
throw assureDioError(e, options);
throw assureDioError(e, reqOpt);
}
}

Expand Down
10 changes: 5 additions & 5 deletions dio/lib/src/entry/dio_for_native.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ import '../options.dart';
import '../dio_error.dart';
import '../adapters/io_adapter.dart';

Dio createDio([BaseOptions? options]) => DioForNative(options);
Dio createDio([BaseOptions? baseOptions]) => DioForNative(baseOptions);

class DioForNative with DioMixin implements Dio {
/// Create Dio instance with default [Options].
/// It's mostly just one Dio instance in your application.
DioForNative([BaseOptions? options]) {
this.options = options ?? BaseOptions();
/// Create Dio instance with default [BaseOptions].
/// It is recommended that an application use only the same DIO singleton.
DioForNative([BaseOptions? baseOptions]) {
options = baseOptions ?? BaseOptions();
httpClientAdapter = DefaultHttpClientAdapter();
}

Expand Down
7 changes: 5 additions & 2 deletions dio/lib/src/options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,6 @@ class _RequestConfig {
}) {
// Case-insensitive Map, eg: content-type and Content-Type are regard as the same key.
this.headers = caseInsensitiveKeyMap(headers);
this.contentType = contentType;
this.method = method ?? 'GET';
this.sendTimeout = sendTimeout ?? 0;
this.receiveTimeout = receiveTimeout ?? 0;
Expand Down Expand Up @@ -571,7 +570,11 @@ class _RequestConfig {
/// you can set `ContentType.parse('application/x-www-form-urlencoded')`, and [Dio]
/// will automatically encode the request body.
set contentType(String? contentType) {
headers[Headers.contentTypeHeader] = contentType?.trim();
if(contentType!=null){
headers[Headers.contentTypeHeader] = contentType.trim();
}else{
headers.remove(Headers.contentTypeHeader);
}
}

String? get contentType => headers[Headers.contentTypeHeader];
Expand Down
17 changes: 9 additions & 8 deletions example/adapter.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import 'dart:async';
import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:dio/adapter.dart';

class MyAdapter extends HttpClientAdapter {
DefaultHttpClientAdapter _adapter = DefaultHttpClientAdapter();
final DefaultHttpClientAdapter _adapter = DefaultHttpClientAdapter();

@override
Future<ResponseBody> fetch(RequestOptions options,
Stream<List<int>> requestStream, Future cancelFuture) async {
Uri uri = options.uri;
Stream<Uint8List>? requestStream, Future? cancelFuture) async {
var uri = options.uri;
// hook requests to google.com
if (uri.host == "google.com") {
return ResponseBody.fromString("Too young too simple!", 200);
if (uri.host == 'google.com') {
return ResponseBody.fromString('Too young too simple!', 200);
}
return _adapter.fetch(options, requestStream, cancelFuture);
}
Expand All @@ -22,11 +23,11 @@ class MyAdapter extends HttpClientAdapter {
}
}

main() async {
void main() async {
var dio = Dio();
dio.httpClientAdapter = MyAdapter();
Response response = await dio.get("https://google.com");
var response = await dio.get('https://google.com');
print(response);
response = await dio.get("https://baidu.com");
response = await dio.get('https://baidu.com');
print(response);
}
12 changes: 6 additions & 6 deletions example/cancel_request.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import 'dart:async';
import 'package:dio/dio.dart';

main() async {
void main() async {
var dio = Dio();
dio.interceptors.add(LogInterceptor());
// Token can be shared with different requests.
CancelToken token = CancelToken();
var token = CancelToken();
// In one minute, we cancel!
Timer(Duration(milliseconds: 500), () {
token.cancel("cancelled");
token.cancel('cancelled');
});

// The follow three requests with the same token.
var url1 = "https://www.google.com";
var url2 = "https://www.facebook.com";
var url3 = "https://www.baidu.com";
var url1 = 'https://www.google.com';
var url2 = 'https://www.facebook.com';
var url3 = 'https://www.baidu.com';

await Future.wait([
dio
Expand Down
8 changes: 4 additions & 4 deletions example/cookie_mgr.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import 'package:dio/dio.dart';
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:cookie_jar/cookie_jar.dart';

main() async {
void main() async {
var dio = Dio();
var cookieJar = CookieJar();
dio.interceptors..add(LogInterceptor())..add(CookieManager(cookieJar));
await dio.get("https://baidu.com/");
await dio.get('https://baidu.com/');
// Print cookies
print(cookieJar.loadForRequest(Uri.parse("https://baidu.com/")));
print(cookieJar.loadForRequest(Uri.parse('https://baidu.com/')));
// second request with the cookie
await dio.get("https://baidu.com/");
await dio.get('https://baidu.com/');
}
20 changes: 10 additions & 10 deletions example/custom_cache_interceptor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ import 'package:dio/dio.dart';
class CacheInterceptor extends Interceptor {
CacheInterceptor();

var _cache = Map<Uri, Response>();
final _cache = <Uri, Response>{};

@override
Future onRequest(RequestOptions options) async {
Response response = _cache[options.uri];
if (options.extra["refresh"] == true) {
print("${options.uri}: force refresh, ignore cache! \n");
var response = _cache[options.uri];
if (options.extra['refresh'] == true) {
print('${options.uri}: force refresh, ignore cache! \n');
return options;
} else if (response != null) {
print("cache hit: ${options.uri} \n");
print('cache hit: ${options.uri} \n');
return response;
}
}
Expand All @@ -30,15 +30,15 @@ class CacheInterceptor extends Interceptor {
}
}

main() async {
void main() async {
var dio = Dio();
dio.options.baseUrl = "https://baidu.com";
dio.options.baseUrl = 'https://baidu.com';
dio.interceptors
..add(CacheInterceptor())
..add(LogInterceptor(requestHeader: false, responseHeader: false));

await dio.get("/"); // second request
await dio.get("/"); // Will hit cache
await dio.get('/'); // second request
await dio.get('/'); // Will hit cache
// Force refresh
await dio.get("/", options: Options(extra: {'refresh': true}));
await dio.get('/', options: Options(extra: {'refresh': true}));
}
58 changes: 30 additions & 28 deletions example/dio.dart
Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@
import 'dart:io';
import 'package:dio/dio.dart';

main() async {
void main() async {
var dio = Dio();
dio.options
..baseUrl = "http://httpbin.org/"
..baseUrl = 'http://httpbin.org/'
..connectTimeout = 5000 //5s
..receiveTimeout = 5000
..validateStatus = (int status) {
return status > 0;
..validateStatus = (int? status) {
return status != null && status > 0;
}
..headers = {
HttpHeaders.userAgentHeader: 'dio',
'common-header': 'xx',
};

// Or you can create dio instance and config it as follow:
// var dio = Dio(BaseOptions(
// baseUrl: "http://www.dtworkroom.com/doris/1/2.0.0/",
// connectTimeout: 5000,
// receiveTimeout: 5000,
// headers: {
// HttpHeaders.userAgentHeader: 'dio',
// 'common-header': 'xx',
// },
// ));

// Or you can create dio instance and config it as follow:
// var dio = Dio(BaseOptions(
// baseUrl: "http://www.dtworkroom.com/doris/1/2.0.0/",
// connectTimeout: 5000,
// receiveTimeout: 5000,
// headers: {
// HttpHeaders.userAgentHeader: 'dio',
// 'common-header': 'xx',
// },
// ));
dio.interceptors
..add(InterceptorsWrapper(
onRequest: (RequestOptions options) {
Expand All @@ -36,13 +35,13 @@ main() async {
))
..add(LogInterceptor(responseBody: false)); //Open log;

Response response = await dio.get("https://www.google.com/");
var response = await dio.get('https://www.google.com/');

// Download a file
response = await dio.download(
"https://www.google.com/",
"./example/xx.html",
queryParameters: {"a": 1},
'https://www.google.com/',
'./example/xx.html',
queryParameters: {'a': 1},
onReceiveProgress: (received, total) {
if (total != -1) {
print('$received,$total');
Expand All @@ -51,24 +50,27 @@ main() async {
);

// Create a FormData
FormData formData = FormData.fromMap({
"age": 25,
"file": await MultipartFile.fromFile(
"./example/upload.txt",
filename: "upload.txt",
var formData = FormData.fromMap({
'age': 25,
'file': await MultipartFile.fromFile(
'./example/upload.txt',
filename: 'upload.txt',
)
});

// Send FormData
response = await dio.post("/test", data: formData);
response = await dio.post('/test', data: formData);
print(response);

// post data with "application/x-www-form-urlencoded" format
response = await dio.post(
"/test",
'/test',
data: {
"id": 8,
"info": {"name": "wendux", "age": 25}
'id': 8,
'info': {
'name': 'wendux',
'age': 25,
}
},
options: Options(
contentType: Headers.formUrlEncodedContentType,
Expand Down
33 changes: 19 additions & 14 deletions example/download.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,30 @@ import 'dart:io';
import 'package:dio/dio.dart';

// In this example we download a image and listen the downloading progress.
main() async {
void main() async {
var dio = Dio();
dio.interceptors.add(LogInterceptor());
// This is big file(about 200M)
// var url = "http://download.dcloud.net.cn/HBuilder.9.0.2.macosx_64.dmg";

var url =
"https://cdn.jsdelivr.net/gh/flutterchina/flutter-in-action@1.0/docs/imgs/book.jpg";
'https://cdn.jsdelivr.net/gh/flutterchina/flutter-in-action@1.0/docs/imgs/book.jpg';

// var url = "https://www.baidu.com/img/bdlogo.gif";
await download1(dio, url, "./example/book.jpg");
await download1(dio, url, (Headers headers) => "./example/book1.jpg");
await download2(dio, url, "./example/book2.jpg");
await download1(dio, url, './example/book.jpg');
await download1(dio, url, (Headers headers) => './example/book1.jpg');
await download2(dio, url, './example/book2.jpg');
}

Future download1(Dio dio, String url, savePath) async {
CancelToken cancelToken = CancelToken();
var cancelToken = CancelToken();
try {
await dio.download(url, savePath,
onReceiveProgress: showDownloadProgress, cancelToken: cancelToken);
await dio.download(
url,
savePath,
onReceiveProgress: showDownloadProgress,
cancelToken: cancelToken,
);
} catch (e) {
print(e);
}
Expand All @@ -31,17 +35,18 @@ Future download1(Dio dio, String url, savePath) async {
//Another way to downloading small file
Future download2(Dio dio, String url, String savePath) async {
try {
Response response = await dio.get(
var response = await dio.get(
url,
onReceiveProgress: showDownloadProgress,
//Received data with List<int>
options: Options(
responseType: ResponseType.bytes,
followRedirects: false,
receiveTimeout: 0),
responseType: ResponseType.bytes,
followRedirects: false,
receiveTimeout: 0,
),
);
print(response.headers);
File file = File(savePath);
var file = File(savePath);
var raf = file.openSync(mode: FileMode.write);
// response.data is List<int> type
raf.writeFromSync(response.data);
Expand All @@ -53,6 +58,6 @@ Future download2(Dio dio, String url, String savePath) async {

void showDownloadProgress(received, total) {
if (total != -1) {
print((received / total * 100).toStringAsFixed(0) + "%");
print((received / total * 100).toStringAsFixed(0) + '%');
}
}
Loading

0 comments on commit 18e7844

Please sign in to comment.