http_extensions

Last updated:

0 purchases

http_extensions Image
http_extensions Images
Add to Cart

Description:

http extensions

http_extensions #
Base classes for building standard extensions for http package.
Usage #
To build an extension, you have to provide an Extension implementation :
import 'package:http/http.dart';
import 'package:http_extensions/http_extensions.dart';

class LogOptions {
final bool isEnabled;
const LogOptions({this.isEnabled = true});
}

class LogExtension extends Extension<LogOptions> {
LogExtension([LogOptions defaultOptions = const LogOptions()])
: super(defaultOptions: defaultOptions);

int _requestId = 0;

Future<StreamedResponse> sendWithOptions(
BaseRequest request, LogOptions options) async {

if(!options.isEnabled) {
return await super.sendWithOptions(request, options);
}

try {
final id = _requestId++;
print(
"[HTTP]($id:${request.method}:${request.url}) Starting request ...");
final result = await super.sendWithOptions(request, options);
print(
"[HTTP]($id:${request.method}:${request.url}) Request succeeded (statusCode: ${result.statusCode})");
return result;
} catch (e) {
print("[HTTP]($id:${request.method}:${request.url}) An error occured during request : $e");
rethrow;
}
}
}
copied to clipboard
To call request using your extensions, the easiest way is to instantiate an ExtendedClient with your extensions.
import 'package:http/http.dart';
import 'package:http_extensions/http_extensions.dart';
import 'log_extension.dart';

Future main() async {
final client = ExtendedClient(
inner: Client(),
extensions: [
LogExtension(),
],
);

// Default options
final defaultResult = await client.get("https://www.google.com");
print("default status code: ${defaultResult.statusCode}");

// Custom options (not logged)
final customResult = await client.getWithOptions("https://www.google.com",
options: [LogOptions(isEnabled: false)]);
print("default status code: ${customResult.statusCode}");
}
copied to clipboard
Conventions #
If you create an extension package, please follow those naming conventions :

http_extensions_<name> : package name
<Name>Extension : extension class
<Name>Options : options class.

<name> : snake_case
<Name> : PascalCase
See a log example
Q & A #

How is this compare to dio ?

Dio does a lot more, but it doesn't integrate well over web. That's why I just wanted a thin layer on top of http package, which is an officially supported package, compatible with native platforms, but also with web browsers.

License:

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files In This Product:

Customer Reviews

There are no reviews.