forked from parse-community/Parse-SDK-Flutter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
parse_relation.dart
55 lines (47 loc) · 1.66 KB
/
parse_relation.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
part of flutter_parse_sdk;
// ignore_for_file: always_specify_types
class ParseRelation<T extends ParseObject> {
ParseRelation({required ParseObject parent, required String key}) {
if (!parent.containsKey(key)) {
throw 'Invalid Relation key name';
}
_targetClass = parent.get<ParseRelation>(key)!.getTargetClass;
_parent = parent;
_key = key;
_parentObjectId = parent.objectId!;
}
ParseRelation.fromJson(Map<String, dynamic> map) {
_knownObjects = parseDecode(map['objects']);
_targetClass = map['className'];
}
//The owning object of this ParseRelation
ParseObject? _parent;
// The object Id of the parent.
String _parentObjectId = '';
//The className of the target objects.
String? _targetClass;
//The key of the relation in the parent object.
String _key = '';
//For offline caching, we keep track of every object we've known to be in the relation.
Set<T>? _knownObjects = <T>{};
QueryBuilder getQuery() {
return QueryBuilder(ParseCoreData.instance.createObject(_targetClass!))
..whereRelatedTo(_key, _parent!.parseClassName, _parentObjectId);
}
void add(T object) {
_targetClass = object.parseClassName;
_knownObjects!.add(object);
_parent!.addRelation(_key, _knownObjects!.toList());
}
void remove(T object) {
_targetClass = object.parseClassName;
_knownObjects!.remove(object);
_parent!.removeRelation(_key, _knownObjects!.toList());
}
String get getTargetClass => _targetClass ?? '';
Map<String, dynamic> toJson() => <String, dynamic>{
'__type': keyRelation,
'className': _targetClass,
'objects': parseEncode(_knownObjects?.toList())
};
}