-
Notifications
You must be signed in to change notification settings - Fork 0
/
example.dart
102 lines (90 loc) · 2.29 KB
/
example.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import 'dart:async';
import 'dart:convert';
import 'dart:isolate';
import 'package:fetch/fetch.dart';
class IResponse extends FetchResponse with FetchJsonResponse {
IResponse.fromResponse(
super.response, {
super.elapsed,
super.encoding,
super.postBody,
this.jsonBody,
}) : super.fromResponse();
@override
final dynamic jsonBody;
@override
FutureOr<List<E>> asList<E>() {
return Isolate.run(
() {
print('run in isolate ${Isolate.current.debugName}');
return super.asList();
},
debugName: 'asList<$E>',
);
}
@override
FutureOr<Map<K, V>> asMap<K, V>() {
return Isolate.run(
() {
print('run in isolate ${Isolate.current.debugName}');
return super.asMap();
},
debugName: 'asMap<$K, $V>',
);
}
}
void main(List<String> args) async {
final fetch = Fetch(
base: Uri.parse('https://api.gece.dev'),
headerBuilder: () {
return {
'content-type': 'application/json',
};
},
// timeout: Duration.zero,
enableLogs: false,
override: (payload, method) {
if (payload.method == 'POST') {
payload = payload.copyWith(body: 'SELAM');
}
return Isolate.run(() => method(payload));
},
transform: (response) {
return IResponse.fromResponse(
response,
jsonBody: jsonDecode(response.encoding.decode(response.bodyBytes)),
elapsed: response.elapsed,
postBody: response.postBody,
);
},
);
final a = await fetch.get('info', enableLogs: true);
final b = await a.asMap<String, dynamic>();
print(b);
// final r1 = await fetch.get(
// 'https://raw.githubusercontent.com/json-iterator/test-data/master/large-file.json',
// cacheOptions: CacheOptions(duration: Duration(seconds: 10)),
// queryParams: {
// 'foo2': 1,
// },
// );
// // final r2 = await fetch.get(
// // '/info',
// // cacheOptions: CacheOptions(duration: Duration(seconds: 10)),
// // queryParams: {
// // 'foo2': 1,
// // },
// // );
// final stopwatch = Stopwatch()..start();
// print(
// [
// '',
// (await r1.asJson()),
// stopwatch.elapsed,
// '',
// (await r1.asJson()),
// stopwatch.elapsed,
// '',
// ].join('\n'),
// );
}