Powerful, helpful, extensible and highly customizable API's that wrap http client to make communication easier with Axelor server with boilerplate code free.

Table of contents

Get Started

Add dependency

     url: https://github.com/Abdktefane/flutter-axelor-sdk.git
     ref: v0.0.1  # you can track the development version => ref: master

initial in main.dart

void main()  {
    builder: AxelorBuilder(
      client: Dio(),
      domain: 'com.axelor.testserver.base.db.', // replace with your axelor server prefix
  runApp(const App());


Let's take searching for contacts example (with pagination and complex search criteria)

  model: Contacts.model,                      // auto end point construct
  baseDomain: Contacts.baseDomain,            // auto end point construct
  mapper: Contacts.fromJson,                  // Auto json decode and map to class object
  page: 0,                                    // page pagination support
  body: AxelorBody(                           // Syntactic sugar to construct body
    fields: const ['fullName', 'email'],
    sortBy: const ['fullName', '-createdOn'],
    criteria: AxelorCriteria.or([
      'age'.between('18', '40'),
      AxelorCriteria.and(['firstName'.like('j%'), 'lastName'.like('s%')])

If we want to achieve the same function without Axelor Sdk

try {
  final response = await client.post(
    data: {
      'offset': 0,
      'limit': 10,
      'fields': ['fullName', 'email'],
      'sortBy': ['fullName', '-createdOn'],
      'data': {
        'criteria': [
            'operator': 'or',
            'criteria': [
              {'fieldName': 'email', 'operator': 'like', 'value': '%gmail.com'},
              {'fieldName': 'lang', 'operator': '=', 'value': 'FR'},
              {'fieldName': 'age', 'operator': 'between', 'value': 18, 'value2': 40},
                'operator': 'and',
                'criteria': [
                  {'fieldName': 'firstName', 'operator': 'like', 'value': 'j%'},
                  {'fieldName': 'lastName', 'operator': 'like', 'value': 's%'}
  // decode to json
  final Map<String, dynamic> jsonResponse = jsonDecode(response.data);
  // check if success response or error happen
  if ((jsonResponse['status'] as int?) != 0) {
    // propagate error to ui

  // map json to Contact Class
  final contacts = Contacts.fromJson(jsonResponse['data']);
} catch (ex, st) {
  // propagate general error to ui


  • Compatible: Compatible with all your existing code so you can adopt when and where you want.
  • Less code: Do more with less code and avoid entire classes of bugs, so code is simple and easy to maintain.
  • Highly customizable : The defaults settings will cover you but if not almost every thing is customizable.
  • Architecture-agnostic: Works with any architecture approach.
  • enterprise-ready: All code is fully tested so it's save to use in production.
  • well documented: Each feature is well documented.

Axelor APIs

You can discover all api's features in documentation. Each api is well documented .

Advanced Use

  • Pagination:
  • Token Refresh:
  • Log Error:
  • Retry logic:


You can help us make this project better, feel free to open an new issue or a pull request.