api_rest_flutter 2.0.0
api_rest_flutter: ^2.0.0 copied to clipboard
A Flutter package for mobile data management with online/offline CRUD operations, local storage, schema-driven validation, and data synchronization. Mobile only.
API REST Flutter #
A Flutter package for mobile data management with online/offline CRUD operations, local storage (ObjectBox), schema-driven validation, and data synchronization. Mobile only (Android/iOS).
Features #
- Online/Offline Mode: Automatic switching between cloud and local operations
- Local Storage: ObjectBox-based local database for offline data
- Data Synchronization: Bidirectional sync between device and server
- Schema-Driven Validation: Dynamic data validation using JSON schemas
- MongoDB-Style Queries: Support for complex queries with
$and,$or,$regexoperators - OAuth-Like Session Management: Automatic token handling and session authorization
- Foreign Key Resolution: Dynamic value population for related collections
- Pagination Support: Built-in pagination for large datasets
- Change Tracking: Automatic detection of modified fields with
eTransferflag
Platform Support #
| Platform | Supported |
|---|---|
| Android | ✅ |
| iOS | ✅ |
| Web | ❌ |
| Desktop | ❌ |
Installation #
Add this to your pubspec.yaml:
dependencies:
api_rest_flutter: ^2.0.0
Then run:
flutter pub get
Getting Started #
Initialize ApiRest #
import 'package:api_rest_flutter/api_rest.dart';
// Create ApiRest instance
final apiRest = ApiRest(
cloudDb: cloudDbInstance,
modeToWork: ModeToWork.online,
gestorData: GestorData.cloud,
coleccionFuncionesBackend: 'funciones',
enableDebugLogs: true,
);
// Initialize
await apiRest.init();
Session Authorization #
final response = await apiRest.autorizaSesion(
clientId: 'your_client_id',
clientSecret: 'your_client_secret',
);
if (response.containsKey(EnvironmentApiRest.dataOk)) {
print('Session authorized');
}
Usage #
Read by ID #
final consulta = '{"idColeccion": "$id"}';
final response = await apiRest.leeById(
coleccion: 'usuarios',
consulta: consulta,
argsLocalBD: [['idServer'], ['='], [id]],
);
if (response.containsKey(EnvironmentApiRest.dataOk)) {
final data = response[EnvironmentApiRest.data];
}
Query Records #
final consulta = '{"data.estado": "activo"}';
final response = await apiRest.obtener(
coleccion: 'productos',
consulta: consulta,
argsLocalBD: [['estado'], ['='], ['activo']],
limit: '20',
skip: '0',
);
if (response.containsKey(EnvironmentApiRest.dataOk)) {
final items = response[EnvironmentApiRest.data];
final total = response[EnvironmentApiRest.totalItems];
}
Save New Record #
final newRecord = ColeccionObjBox()
..coleccion = 'usuarios'
..data = jsonEncode({'nombre': 'Juan', 'email': 'juan@ejemplo.com'});
final response = await apiRest.guardar(
data: newRecord,
versionData: '1',
);
if (response.containsKey(EnvironmentApiRest.dataOk)) {
final savedRecord = response[EnvironmentApiRest.data];
}
Update Record #
existingRecord.data = jsonEncode({'nombre': 'Juan Actualizado'});
final response = await apiRest.actualizar(
data: existingRecord,
versionData: '1',
);
Change Record State #
final response = await apiRest.cambiaEstado(
coleccion: 'usuarios',
id: 'record_id',
estado: 'inactivo',
);
Data Validation #
Use UtilsDataApiRest for schema-based validation:
final utils = UtilsDataApiRest(apiRest: apiRest);
final validationResult = await utils.validaDataInMap(
data: userData,
esquema: schema,
);
if (validationResult[EnvironmentApiRest.dataOk] != null) {
// Data is valid
}
Supported Validation Types #
string,number,booleanarray,arrayObjects,objectjsonStringurl,correo(email)fecha,fechaHoraentero,decimalcuit,coleccion
Query Examples #
Simple Query #
final consulta = '{"data.nombre": "Juan"}';
Regex Search #
final consulta = '{"data.descripcion": {"\$regex": ".*texto.*"}}';
Complex Query #
final consulta = '{"\$and": [
{"data.edad": {"\$gte": 18}},
{"data.activo": true}
]}';
Response Format #
All API methods return a Map<String, dynamic>:
Success:
{
EnvironmentApiRest.dataOk: 'OK',
EnvironmentApiRest.data: <result>
}
Error:
{
EnvironmentApiRest.dataNOk: 'NOK',
EnvironmentApiRest.error: <message>
}
Requirements #
- Flutter SDK: >=3.1.0
- Dart SDK: >=3.1.0 <4.0.0
Dependencies #
This package uses the RobleSistemas provider ecosystem:
flutter_http_provider: HTTP client operationsflutter_security_provider: Authentication/securityflutter_data_cloud_provider: Cloud data operationsflutter_data_shp_provider: SharedPreferences storageflutter_utils_providers: Utility functionsflutter_models_provider: Data models
License #
This project is licensed under the MIT License - see the LICENSE file for details.
Author #
RobleSistemas
Support #
For issues and feature requests, please visit the GitHub repository.