api_rest_flutter_mobile 3.0.0 copy "api_rest_flutter_mobile: ^3.0.0" to clipboard
api_rest_flutter_mobile: ^3.0.0 copied to clipboard

A comprehensive Flutter package for data management with online/offline capabilities, schema-driven validation, and bidirectional synchronization for iOS and Android applications.

API REST Flutter Mobile #

pub package License: MIT Platform

A comprehensive Flutter package for data management with online/offline capabilities, designed for enterprise applications requiring robust data synchronization and offline operations.

Features #

  • Online/Offline Mode: Automatic switching between online and offline operations
  • Data Synchronization: Bidirectional sync with transfer status tracking
  • Schema-Based Validation: Dynamic data validation using JSON schemas
  • Complete CRUD Operations: Create, read, update, delete with offline support
  • Built-in Authentication: OAuth-like session management system
  • Local Cache: Local storage using ObjectBox for fast access
  • Regex Validation: Data type validation with customizable regular expressions
  • Pagination: Full support for paginated results
  • Multi-provider: Provider-based architecture for different data sources

Platform Support #

Platform Support
Android
iOS
Web
Desktop

Installation #

Add this to your pubspec.yaml:

dependencies:
  api_rest_flutter_mobile: ^2.0.0

Then run:

flutter pub get

Quick Start #

1. Initialize ApiRest #

import 'package:api_rest_flutter_mobile/api_rest.dart';
import 'package:flutter_data_cloud_provider/flutter_data_cloud_provider.dart';
import 'package:flutter_data_mobile_provider/flutter_data_mobile_provider.dart';
import 'package:flutter_models_provider/global/environment.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Create provider instances
  final cloudDb = CloudDb(
    endpointApi: 'https://your-api.com/api',
    endpointAuth: 'https://your-api.com/auth',
  );

  final mobileDb = MobileDb();

  // Create ApiRest singleton
  final apiRest = ApiRest(
    cloudDb: cloudDb,
    mobileDb: mobileDb,
    modeToWork: ModeToWork.online,
    gestorData: GestorData.objectBox,
    coleccionFuncionesBackend: 'funcionesBackend',
  );

  // Initialize ObjectBox and SharedPreferences
  await apiRest.init();

  runApp(MyApp());
}

2. CRUD Operations #

Create Record

final producto = ColeccionObjBox(
  coleccion: 'productos',
  estado: 'A',
  data: jsonEncode({
    'nombre': 'Laptop HP',
    'precio': 1299.99,
    'stock': 50,
  }),
);

final result = await apiRest.guardar<ColeccionObjBox>(
  data: producto,
  versionData: '1',
);

if (result.containsKey(EnvironmentApiRest.dataOk)) {
  final saved = result[EnvironmentApiRest.data] as ColeccionObjBox;
  print('Created with ID: ${saved.idServer}');
}

Read by ID

final result = await apiRest.leeById<ColeccionObjBox>(
  coleccion: 'productos',
  consulta: '{"_id": "$productId"}',
  argsLocalBD: [['idServer'], ['='], [productId]],
);

if (result.containsKey(EnvironmentApiRest.dataOk)) {
  final producto = result[EnvironmentApiRest.data] as ColeccionObjBox;
  print('Product: ${jsonDecode(producto.data)['nombre']}');
}

Query Records

final result = await apiRest.obtener<ColeccionObjBox>(
  coleccion: 'productos',
  consulta: '{"data.activo": true}',
  argsLocalBD: [['activo'], ['='], ['true']],
  limit: '25',
  skip: '0',
);

if (result.containsKey(EnvironmentApiRest.dataOk)) {
  final productos = List<ColeccionObjBox>.from(result[EnvironmentApiRest.data]);
  print('Total: ${result[EnvironmentApiRest.totalItems]}');
}

Update Record

final result = await apiRest.actualizar<ColeccionObjBox>(
  data: productoModificado,
  versionData: '1',
);

3. Synchronization #

Download from Server

final result = await apiRest.downLoadInfoFromServer<ColeccionObjBox>(
  coleccion: 'productos',
);

if (result[EnvironmentApiRest.existeData] == true) {
  print('Data downloaded successfully');
}

Upload to Server

final result = await apiRest.uploadInfoToServer<ColeccionObjBox>(
  coleccion: 'productos',
  versionData: '1',
);

4. Schema Validation #

import 'package:api_rest_flutter_mobile/util/utils_data_api_rest.dart';

final utilsData = UtilsDataApiRest(apiRest: apiRest);

// Get schema
final esquema = await apiRest.obtieneEsquema(valor: 'productos');

// Validate data
final validation = await utilsData.validaDataInMap(
  esquema: esquema,
  mapaActualizado: productData,
);

if (validation.containsKey(EnvironmentApiRest.dataOk)) {
  print('Validation passed');
} else {
  print('Error: ${validation[EnvironmentApiRest.error]}');
}

Query Formats #

MongoDB-Style (Online) #

// Simple query
'{"data.nombre": "Juan"}'

// Regex search
'{"data.descripcion": {"\$regex": ".*texto.*", "\$options": "i"}}'

// Range query
'{"data.edad": {"\$gte": 18, "\$lte": 65}}'

// AND condition
'{"\$and": [{"data.activo": true}, {"data.categoria": "A"}]}'

ObjectBox Args (Offline) #

// Format: [[fields], [operators], [values]]
// Operators: =, !=, >, <, >=, <=, like

[['nombre', 'activo'], ['like', '='], ['Juan', 'true']]

Response Format #

All operations return a Map<String, dynamic>:

Success:

{
  EnvironmentApiRest.dataOk: 'OK',
  EnvironmentApiRest.data: <result>,
}

Error:

{
  EnvironmentApiRest.dataNOk: 'NOK',
  EnvironmentApiRest.error: 'Error message',
}

Data Model #

Records use the ColeccionObjBox model with standard fields:

Field Description
idServer Server-assigned ID (MongoDB ObjectId)
idMobile Device-assigned ID (for offline records)
eTransfer Sync status: '' (synced) or 'D' (pending)
creadoEl Creation timestamp
estado Record status (A=Active, I=Inactive)
coleccion Collection name
data JSON string with record data
dataOriginal Last synced state (for change detection)

Requirements #

  • Flutter SDK: >=3.10.0
  • Dart SDK: >=3.1.0 <4.0.0
  • iOS: >=11.0
  • Android: minSdkVersion 21

Dependencies #

This package uses the RobleSistemas provider ecosystem:

  • flutter_objectbox_provider: Local database (ObjectBox)
  • flutter_http_provider: HTTP operations
  • flutter_security_provider: Security and authentication
  • flutter_data_cloud_provider: Cloud operations
  • flutter_data_mobile_provider: Mobile operations
  • flutter_data_shp_provider: SharedPreferences
  • flutter_utils_providers: General utilities
  • 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 or feature requests, please contact RobleSistemas or open an issue on pub.flutter-io.cn.

0
likes
145
points
239
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter package for data management with online/offline capabilities, schema-driven validation, and bidirectional synchronization for iOS and Android applications.

Topics

#api #rest #offline #sync #objectbox

Documentation

API reference

License

MIT (license)

Dependencies

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

More

Packages that depend on api_rest_flutter_mobile