api_rest_flutter 2.0.0 copy "api_rest_flutter: ^2.0.0" to clipboard
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, $regex operators
  • 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 eTransfer flag

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, boolean
  • array, arrayObjects, object
  • jsonString
  • url, correo (email)
  • fecha, fechaHora
  • entero, decimal
  • cuit, coleccion

Query Examples #

Simple Query #

final consulta = '{"data.nombre": "Juan"}';
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 operations
  • flutter_security_provider: Authentication/security
  • flutter_data_cloud_provider: Cloud data operations
  • flutter_data_shp_provider: SharedPreferences storage
  • flutter_utils_providers: Utility functions
  • flutter_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.

0
likes
150
points
194
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package for mobile data management with online/offline CRUD operations, local storage, schema-driven validation, and data synchronization. Mobile only.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

collection, flutter, flutter_data_cloud_provider, flutter_data_shp_provider, flutter_http_provider, flutter_models_provider, flutter_security_provider, flutter_utils_providers, intl

More

Packages that depend on api_rest_flutter