flutter_axelor_sdk
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
flutter_axelor_sdk:
git:
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() {
Axelor.initialize(
builder: AxelorBuilder(
client: Dio(),
domain: 'com.axelor.testserver.base.db.', // replace with your axelor server prefix
),
);
runApp(const App());
}
Example
Let's take searching for contacts example (with pagination and complex search criteria)
Axelor.search(
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([
'email'.like('%gmail.com'),
'lang'.equal('FR'),
'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(
'/ws/rest/com.axelor.contact.db.Contact/search',
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
return;
}
// map json to Contact Class
final contacts = Contacts.fromJson(jsonResponse['data']);
} catch (ex, st) {
// propagate general error to ui
}
Features
- 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 .
x
Searchx
Advanced Searchx
Fetchx
Advanced Fetchx
Deletex
Advanced Deletex
Createx
Update
Advanced Use
- Pagination:
- Token Refresh:
- Log Error:
- Retry logic:
Contributing
You can help us make this project better, feel free to open an new issue or a pull request.
Libraries
- flutter_axelor_sdk
- models/axelor_criteria
- models/axelor_list_model
- models/axelor_model
- models/axelor_operators
- models/axelor_version_model
- models/exceptions
- models/failures
- rest/create_ext
- rest/delete_all_ext
- rest/delete_ext
- rest/fetch_ext
- rest/search_ext
- rest/update_ext
- utils/axelor_body
- utils/axelor_result
- utils/error_logger
- utils/token_options