English

ETICON API

Package for working with http requests.

Initialization

First you need to initialize:

void main() async {
  await Api.init(baseUrl: 'https://example.com/');
  runApp(MyApp());
}

Methods

Parameters Request type Value
isAuth ALL If the value is true, the request will be authorized
method ALL Accepts a string appended to baseURL
body POST, PUT, PATCH Accepts request body in Map
query GET, DELETE Accepts query in Map
testMode ALL if true shows detailed information about the request

GET

Future<void> getRequest() async {
    try{
      Map<String, dynamic> response = await Api.get(method: 'product', query: {"id": 5});
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }

POST

Future<void> postRequest() async {
    try{
      Map<String, dynamic> response = await Api.post(method: 'product', body: {"id": 5});
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }

DELETE

Future<void> deleteRequest() async {
    try{
      Map<String, dynamic> response = await Api.delete(method: 'product', query: {"id": 5}, isAuth: true);
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }

PUT

Future<void> putRequest() async {
    try{
      Map<String, dynamic> response = await Api.put(method: 'product', body: {"id": 5}, isAuth: true);
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }

PATCH

Future<void> patchRequest() async {
    try{
      Map<String, dynamic> response = await Api.patch(method: 'product', body: {"id": 5}, isAuth: true);
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }

Raw Methods

All raw methods take the url to be requested. In case of GET and DELETE without parameters. They are specified separately as in the methods described above.

Future<void> request() async {
    try{
      Map<String, dynamic> response = await Api.rawGet(url: 'https://example.com/profile', query: {"id": 5}, headers: {"Content-type": 'application/json'});
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }
Future<void> request() async {
    try{
      Map<String, dynamic> response = await Api.rawPost(url: 'https://example.com/profile', body: {"id": 5}, headers: {"Content-type": 'application/json'});
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }
Future<void> request() async {
  try{
    Map<String, dynamic> response = await Api.rawDelete(url: 'https://example.com/profile', query: {"id": 5}, headers: {"Content-type": 'application/json'});
  } on APIException catch(error){
    print('ERROR CODE: ${error.code}');
  }
}
Future<void> request() async {
  try{
    Map<String, dynamic> response = await Api.rawPut(url: 'https://example.com/profile', body: {"id": 5}, headers: {"Content-type": 'application/json'});
  } on APIException catch(error){
    print('ERROR CODE: ${error.code}');
  }
}
Future<void> request() async {
  try{
    Map<String, dynamic> response = await Api.rawPatch(url: 'https://example.com/profile', body: {"id": 5}, headers: {"Content-type": 'application/json'});
  } on APIException catch(error){
    print('ERROR CODE: ${error.code}');
  }
}

HTTP status codes

If the result of the status code in the response is not 200, then APIException will be thrown. It contains the status code as well as the response body. In case there are problems with the Internet connection, APIException will return code 0.

Headers

To declare headers, you must use the method:

  Api.setHeaders({"Content-type": 'application/json'});

If no headers are set then the default is Content-type: application / json

Note!!! that the Authorization header is added automatically on an authorized request.

Authorization

For authorized requests, you need to set the token value. The set value will be written to the device memory. When using Api.init (), the token will be automatically unloaded from the device memory. But you can disable loadTokenFromMemory:

void main() async {
  await Api.init(baseUrl: 'https://example.com/', loadTokenFromMemory: false);
  runApp(MyApp());
}
  Api.setToken('{your_token}');

Get a token:

  Api.token;

Clear token:

  Api.clearToken();

You can also check the token for emptiness or non-emptiness:

  Api.tokenIsEmpty;//return true or false
  Api.tokenIsNotEmpty;//return true or false

If you do not use the Bearer type in the token, then disable it:

void main() async {
  await Api.init(baseUrl: 'https://example.com/', bearerToken: false);
  runApp(MyApp());
}

Refresh token

by analogy with the authorization token, you can use the refresh token:

   Api.setRefreshToken('{your_token}');

Get a token:

   Api.refreshToken;

Clear token:

   Api.clearRefreshToken();

You can also check if the token is empty or not empty:

   Api.refreshTokenIsEmpty;//return true or false
   Api.refreshTokenIsNotEmpty;//return true or false

Set token expiration time in seconds:

   Api.setExpire(3600);

Checking if the authorization token has expired:

   Api.isTokenExpire;

Get the expiration date of the authorization token:

   Api.expireDate;

Test Mode

Test Mode is a handy tool for developing an application that shows complete information about the request (parameters, full URL, response body, etc.). In addition, this feature disables all error handlers. Test mode can be set globally for all requests in the project:

void main() async {
  await Api.init(baseUrl: 'https://example.com/', globalTestMode: true);
  runApp(MyApp());
}

And on a separate request:

Future<void> getRequest() async {
    try{
      Map<String, dynamic> response = await Api.get(method: 'product', isAuth: true, testMode: true);
    } on APIException catch(error){
      print('ERROR CODE: ${error.code}');
    }
  }

To disable test mode in the whole project, you can use disableAllTestMode:

void main() async {
  await Api.init(
    baseUrl: 'https://example.com/', 
    globalTestMode: true, // Will be ignored
    disableAllTestMode: true,
  );
  runApp(MyApp());
}

Server storage url

It is often necessary to get various data from the server storage, for example, images. However, the base url and the url to the storage sometimes don't match or you have to write the url manually each time.

To set a storage url, it must be specified in the initialization:

void main() async {
  await Api.init(baseUrl: 'https://example.com/', storageUrl: 'https://example.com/storage/');
  runApp(MyApp());
}

Usage example:

Image.network(Api.dataFromStorage('image.png'));

Decoding UTF-8

There is built-in support for decoding in response to utf-8

void main() async {
  await Api.init(
    baseUrl: 'https://example.com/', 
    ebableUtf8Decoding: true,
  );
  runApp(MyApp());
}

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.

Libraries

dart_eticon_api
eticon_api
Eticon API is a handy and simple package for handling http requests.