This library provides an http/2 interface on top of a bidirectional stream of bytes.
Here is a minimal example of connecting to a http/2 capable server, requesting a resource and iterating over the response.
import 'dart:convert'; import 'dart:io'; import 'package:http2/http2.dart'; main() async { var uri = Uri.parse('https://www.google.com/'); var transport = new ClientTransportConnection.viaSocket( await SecureSocket.connect( uri.host, uri.port, supportedProtocols: ['h2'], ), ); var stream = transport.makeRequest( [ new Header.ascii(':method', 'GET'), new Header.ascii(':path', uri.path), new Header.ascii(':scheme', uri.scheme), new Header.ascii(':authority', uri.host), ], endStream: true, ); await for (var message in stream.incomingMessages) { if (message is HeadersStreamMessage) { for (var header in message.headers) { var name = utf8.decode(header.name); var value = utf8.decode(header.value); print('Header: $name: $value'); } } else if (message is DataStreamMessage) { // Use [message.bytes] (but respect 'content-encoding' header) } } await transport.finish(); }
An example with better error handling is available here.
See the API docs for more details.
Please file feature requests and bugs at the issue tracker.