-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhttp_client.dart
47 lines (37 loc) · 1.36 KB
/
http_client.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
import 'package:http/http.dart';
import 'package:repositories/repositories.dart';
class _DefaultHttpObserver extends HttpObserver {}
class MyAppHttpClient extends BaseClient {
static String clientURL = '';
static String authToken = '';
static HttpObserver observer = _DefaultHttpObserver();
final Client _inner;
final bool needsAuthorization;
MyAppHttpClient(this._inner, {this.needsAuthorization = true});
Uri buildUri(String unencodedPath, [Map<String, dynamic>? queryParameters]) {
return Uri.parse(clientURL).replace(
path: unencodedPath,
queryParameters: queryParameters,
);
}
@override
Future<StreamedResponse> send(BaseRequest request) async {
if (needsAuthorization) {
request.headers['Authorization'] = MyAppHttpClient.authToken;
}
observer.onSend(request);
final streamResponse = await _inner.send(request);
if (streamResponse.statusCode < 400) {
return streamResponse;
}
var message =
'Request to ${request.url} failed with status ${streamResponse.statusCode}';
if (streamResponse.reasonPhrase != null) {
message = '$message: ${streamResponse.reasonPhrase}';
}
final httpException = HttpException(
message, request.url.toString(), streamResponse.statusCode);
observer.onHttpErrorResponse(request, streamResponse.statusCode);
throw httpException;
}
}