API Reference
Complete API documentation for SyncLayer SDK
SyncLayer
The main entry point for the SyncLayer SDK.
init
static Future<void> init(SyncConfig config)Initialize SyncLayer with configuration
Parameters:
config(SyncConfig) - Configuration object
Returns:
Future<void>Example:
await SyncLayer.init(
SyncConfig(
baseUrl: 'https://api.example.com',
collections: ['todos', 'users'],
conflictStrategy: ConflictStrategy.lastWriteWins,
),
);collection
static CollectionManager collection(String name)Get a collection manager for CRUD operations
Parameters:
name(String) - Collection name
Returns:
CollectionManagerExample:
final todos = SyncLayer.collection('todos');syncNow
static Future<void> syncNow()Trigger immediate synchronization
Returns:
Future<void>Example:
await SyncLayer.syncNow();events
static Stream<SyncEvent> get eventsStream of sync events
Returns:
Stream<SyncEvent>Example:
SyncLayer.events.listen((event) {
if (event is SyncStartedEvent) {
print('Sync started');
}
});dispose
static Future<void> dispose()Clean up resources and close connections
Returns:
Future<void>Example:
await SyncLayer.dispose();SyncConfig
Configuration object for initializing SyncLayer.
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
baseUrl | String? | No | - | Base URL for REST API (required if no custom adapter) |
collections | List<String> | Yes | - | List of collection names to sync |
conflictStrategy | ConflictStrategy | No | lastWriteWins | Strategy for conflict resolution |
syncInterval | Duration | No | 30 seconds | Automatic sync interval |
maxRetries | int | No | 3 | Maximum retry attempts |
retryDelay | Duration | No | 2 seconds | Delay between retries |
customBackendAdapter | BackendAdapter? | No | - | Custom backend adapter |
authToken | String? | No | - | Authentication token |
CollectionManager
Manages CRUD operations for a specific collection.
save
Future<String> save(Map<String, dynamic> data, {String? id})Save or update a document
Parameters:
data(Map<String, dynamic>) - Document dataid(String?) - Optional document ID (for updates)
Returns:
Future<String> - Document IDExample:
final id = await SyncLayer
.collection('todos')
.save({'text': 'Buy milk', 'done': false});get
Future<Map<String, dynamic>?> get(String id)Retrieve a document by ID
Parameters:
id(String) - Document ID
Returns:
Future<Map<String, dynamic>?>Example:
final todo = await SyncLayer
.collection('todos')
.get(id);getAll
Future<List<Map<String, dynamic>>> getAll()Retrieve all documents in collection
Returns:
Future<List<Map<String, dynamic>>>Example:
final todos = await SyncLayer
.collection('todos')
.getAll();delete
Future<void> delete(String id)Delete a document by ID
Parameters:
id(String) - Document ID
Returns:
Future<void>Example:
await SyncLayer
.collection('todos')
.delete(id);watch
Stream<List<Map<String, dynamic>>> watch()Watch for real-time changes
Returns:
Stream<List<Map<String, dynamic>>>Example:
SyncLayer
.collection('todos')
.watch()
.listen((todos) {
print('Updated: ${todos.length} items');
});ConflictStrategy
Enum for conflict resolution strategies.
| Value | Description |
|---|---|
lastWriteWins | Most recent modification wins (by timestamp) |
serverWins | Server data always takes precedence |
clientWins | Local changes always take precedence |
Events
Event types emitted by SyncLayer.
SyncStartedEventSync process started
SyncCompletedEventSync completed successfully
SyncErrorEventSync error occurred
ConflictDetectedEventConflict detected during sync
ConnectivityChangedEventNetwork connectivity changed
Backend Adapters
Built-in backend adapters for different services.
FirebaseAdapter
import 'package:synclayer/adapters/firebase_adapter.dart';
await SyncLayer.init(
SyncConfig(
collections: ['todos'],
customBackendAdapter: FirebaseAdapter(
firestore: FirebaseFirestore.instance,
),
),
);SupabaseAdapter
import 'package:synclayer/adapters/supabase_adapter.dart';
await SyncLayer.init(
SyncConfig(
collections: ['todos'],
customBackendAdapter: SupabaseAdapter(
client: Supabase.instance.client,
),
),
);AppwriteAdapter
import 'package:synclayer/adapters/appwrite_adapter.dart';
await SyncLayer.init(
SyncConfig(
collections: ['todos'],
customBackendAdapter: AppwriteAdapter(
databases: databases,
databaseId: 'your-database-id',
),
),
);Need Help?
Check out our examples and guides for more detailed usage.