hio 0.2.3 copy "hio: ^0.2.3" to clipboard
hio: ^0.2.3 copied to clipboard

outdated

Enhanced Http Client for Dart/Flutter. Make Api call easy, an Dart/Flutter package.

hio #

Build Status Pub

Enhanced Http Client for Dart/Flutter.

Getting Started #

This project is a starting point for a Dart package, a library module containing code that can be shared easily across multiple Flutter or Dart projects.

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Add dependency #

dependencies:
  hio: x.x.x  #latest version

Usages #

Simple get

import 'package:hio/hio.dart';

void getRepos(String username) async {
  try {
    var api = new Api()
      ..debugHeader = true
      ..baseUrl = "https://api.github.com/";

    api.get('users/:user/repos', urlParams: {'user': username})
      ..successCB = (data, resp) {
        print('data: $data');
      }
      ..errorCB = (err, resp) {
        print('ERROR: $err');
      }
      ..go();
  } catch (e) {
    return print(e);
  }
}

Multiple calls, and use global successCB and errorCB

void getSomething(String username) async {
    var api = new Api()
      ..debugHeader = true
      ..baseUrl = "https://api.github.com/";
      ..successCB = (data, resp) {
        print('data: $data');
      }
      ..errorCB = (err, resp) {
        print('ERROR: $err');
      };

    var c = api.get('users/:user/repos', urlParams: {'user': username})

    await c.go();
    
    // second call here
    await c.go(urlParams: {'user': 'google'})
}

Define your API class

class SwApi extends Api {
  int xRateLimitLimit = 60;
  int xRateLimitRemaining = 59;
  int xRateLimitReset = 1547617535;
  String xGitHubRequestId;

  SwApi() : super() {
    this
      ..debugHeader = true
      ..debugBody = false
      ..baseUrl = 'https://swapi.co/api/'
      ..addOnSendHandler((req) {
        return true;
      })
      ..successCB = (data, resp) {
        print('data: $data');
      }
      ..errorCB = (err, resp) {
        print('ERROR: $err');
      };
  }

  @override
  String toString() {
    return 'SwApi[]';
  }
}

# and use it:
    var api = SwApi();

    var x = api('people/:id', method: 'GET', urlParams: {'id': 1});
    await x.go();

    await api.get('people/:id', urlParams: {'id': 2}).go();

Preprocessing the received data

class GithubApi extends Api {
  int xRateLimitLimit = 60;
  int xRateLimitRemaining = 59;
  int xRateLimitReset = 1547617535;
  String xGitHubRequestId;
  Map<String, String> links;

  String trim(String s, {String chars = ' '}) {
    for (var i = 0; i < chars.length; i++) {
      var char = chars[i];
      if (s.startsWith(char)) s = s.substring(1);
      if (s.endsWith(char)) s = s.substring(0, s.length - 1);
    }
    return s;
  }

  GithubApi() : super() {
    this
      ..debugHeader = true
      ..debugBody = false
      ..baseUrl = 'https://api.github.com/'
      ..accept = 'application/vnd.github.v3+json'
      ..addOnSendHandler((req) {
        return true;
      })
      ..addOnProcessDataHandler((dynamic data, HttpClientResponse resp) {
        resp.headers.forEach((k, values) {
          // 'cache-control',
          links ??= <String, String>{};
          if (k == 'link') {
            for (var ss1 in values[0].split(',')) {
              print('$ss1');
              var ss2 = ss1.split(';');
              var link = trim(ss2[0].trim(), chars: '<>');
              var rel = ss2[1].trim();
              if (rel.startsWith('rel=')) rel = rel.substring(4);
              rel = trim(rel, chars: '"');
              links[rel] = link;
            }
          } else if (k == 'x-ratelimit-limit') {
            xRateLimitLimit = int.tryParse(values[0]) ?? 0;
          } else if (k == 'x-ratelimit-remaining') {
            xRateLimitRemaining = int.tryParse(values[0]) ?? 0;
          } else if (k == 'x-ratelimit-reset') {
            xRateLimitReset = int.tryParse(values[0]) ?? 0;
          } else if (k == 'x-github-request-id') {
            xGitHubRequestId = values[0];
          }
        });
        return data;
      });
  }

  @override
  String toString() {
    return 'GithubApi[xRateLimitLimit:$xRateLimitLimit, xRateLimitRemaining:$xRateLimitRemaining, xRateLimitReset: $xRateLimitReset]';
  }
}

# and use it:
    var api = GithubApi()
      ..successCB = (data, resp) {
        print('data received: $data');
        print('links: ${api.links}');
      }
      ..errorCB = (err, resp) {
        print('ERROR: $err');
      };

    var x = api('users/:user/repos', urlParams: {'user': 'hedzr'});

    await x.go();
0
likes
0
pub points
0%
popularity

Publisher

unverified uploader

Enhanced Http Client for Dart/Flutter. Make Api call easy, an Dart/Flutter package.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

More

Packages that depend on hio