pull method
Future<List<SyncRecord> >
pull({
- required String collection,
- DateTime? since,
- int? limit,
- int? offset,
- SyncFilter? filter,
override
Pull data from backend with optional pagination and filtering
Parameters:
collection: Collection name to pull fromsince: Only pull records modified after this timestamplimit: Maximum number of records to pulloffset: Number of records to skip (for pagination)filter: Optional sync filter for selective synchronization
Implementation
@override
Future<List<SyncRecord>> pull({
required String collection,
DateTime? since,
int? limit,
int? offset,
SyncFilter? filter,
}) async {
List<String> queries = [];
final effectiveSince = filter?.since ?? since;
if (effectiveSince != null) {
queries.add(
Query.greaterThan('updated_at', effectiveSince.toIso8601String()));
}
if (filter?.where != null) {
for (final entry in filter!.where!.entries) {
queries.add(Query.equal('data.${entry.key}', entry.value));
}
}
final effectiveLimit = filter?.limit ?? limit;
if (effectiveLimit != null) queries.add(Query.limit(effectiveLimit));
if (offset != null) queries.add(Query.offset(offset));
// ignore: deprecated_member_use
final response = await databases.listDocuments(
databaseId: databaseId,
collectionId: collection,
queries: queries,
);
return response.documents.map((doc) {
var recordData = doc.data['data'] as Map<String, dynamic>;
if (filter != null) recordData = filter.applyFieldFilter(recordData);
return SyncRecord(
recordId: doc.$id,
data: recordData,
updatedAt: DateTime.parse(doc.data['updated_at'] as String),
version: doc.data['version'] as int? ?? 1,
);
}).toList();
}