1
1
import 'package:firebase_admin/src/firestore/document.dart' ;
2
2
import 'package:googleapis/firestore/v1.dart' ;
3
+ import 'package:maps_toolkit/maps_toolkit.dart' as maps_toolkit;
4
+
5
+ import '../firestore.dart' ;
3
6
4
7
Map <String , dynamic > fromFirestore (DocumentSnapshot <Map <String , dynamic >> snapshot) =>
5
8
snapshot.data ();
6
9
7
10
Map <String , dynamic > toFirestore (Map <String , dynamic > value) => value;
8
11
9
- Map <String , dynamic > deserializeData (Map <String , Value > fields) {
10
- return fields.map ((key, value) => MapEntry (key, deserializeValue (value)));
12
+ Map <String , dynamic > deserializeData (Firestore firestore, Map <String , Value > fields) {
13
+ return fields.map ((key, value) => MapEntry (key, deserializeValue (firestore, value)));
11
14
}
12
15
13
16
Map <String , Value > serializeData (Map <String , dynamic > data) {
14
17
return data.map ((key, value) => MapEntry (key, serializeValue (value)));
15
18
}
16
19
17
- dynamic deserializeValue (Value value) {
20
+ dynamic deserializeValue (Firestore firestore, Value value) {
18
21
if (value.arrayValue != null ) {
19
- return value.arrayValue! .values! .map (deserializeValue).toList ();
22
+ return value.arrayValue! .values! .map ((value) => deserializeValue (firestore, value) ).toList ();
20
23
} else if (value.booleanValue != null ) {
21
24
return value.booleanValue! ;
22
25
} else if (value.bytesValue != null ) {
23
- return null ;
26
+ return null ; // TODO: Add support to it
24
27
} else if (value.doubleValue != null ) {
25
28
return value.doubleValue! ;
26
29
} else if (value.geoPointValue != null ) {
27
- return null ;
30
+ return maps_toolkit. LatLng (value.geoPointValue ! .latitude ! , value.geoPointValue ! .longitude ! ) ;
28
31
} else if (value.integerValue != null ) {
29
32
return int .parse (value.integerValue! );
30
33
} else if (value.mapValue != null ) {
31
- return deserializeData (value.mapValue! .fields! );
34
+ return deserializeData (firestore, value.mapValue! .fields! );
32
35
} else if (value.nullValue != null ) {
33
36
return null ;
34
37
} else if (value.referenceValue != null ) {
35
- return null ;
38
+ return DocumentReference <Map <String , dynamic >>(
39
+ firestore: firestore,
40
+ fromFirestore: fromFirestore,
41
+ toFirestore: toFirestore,
42
+ path: value.referenceValue! ,
43
+ );
36
44
} else if (value.stringValue != null ) {
37
45
return value.stringValue! ;
38
46
} else if (value.timestampValue != null ) {
@@ -46,11 +54,13 @@ Value serializeValue(dynamic data) {
46
54
booleanValue: data is bool ? data : null ,
47
55
bytesValue: null ,
48
56
doubleValue: data is double ? data : null ,
49
- geoPointValue: null ,
57
+ geoPointValue: data is maps_toolkit.LatLng
58
+ ? LatLng (latitude: data.latitude, longitude: data.longitude)
59
+ : null ,
50
60
integerValue: data is int ? '$data ' : null ,
51
61
mapValue: data is Map <String , dynamic > ? MapValue (fields: serializeData (data)) : null ,
52
62
nullValue: data == null ? 'nullValue' : null ,
53
- referenceValue: null ,
63
+ referenceValue: data is DocumentReference < Map < String , dynamic >> ? data.path : null ,
54
64
stringValue: data is String ? data : null ,
55
65
timestampValue: data is DateTime ? '${data .microsecondsSinceEpoch }' : null ,
56
66
);
0 commit comments