1
- import " dart:convert" ;
2
- import " package:objectbox/src/modelinfo/index.dart" ;
3
- import " package:objectbox/src/bindings/bindings.dart" show OBXPropertyType ;
4
- import " package:source_gen/source_gen.dart" show InvalidGenerationSourceError;
1
+ import ' dart:convert' ;
2
+ import ' package:objectbox/src/modelinfo/index.dart' ;
3
+ import ' package:objectbox/src/bindings/bindings.dart' ;
4
+ import ' package:source_gen/source_gen.dart' show InvalidGenerationSourceError;
5
5
6
6
class CodeChunks {
7
7
static String objectboxDart (ModelInfo model, List <String > imports) => """
8
8
// GENERATED CODE - DO NOT MODIFY BY HAND
9
9
10
10
// Currently loading model from "JSON" which always encodes with double quotes
11
11
// ignore_for_file: prefer_single_quotes
12
-
12
+ ${ typedDataImportIfNeeded ( model )}
13
13
import 'package:objectbox/objectbox.dart';
14
14
export 'package:objectbox/objectbox.dart'; // so that callers only have to import this file
15
15
import '${imports .join ("';\n import '" )}';
@@ -36,13 +36,34 @@ class CodeChunks {
36
36
},
37
37
writer: (Map<String, dynamic> members) {
38
38
final r = $name ();
39
- ${entity .properties .map (( p ) => "r.${ p . name } = members['${ p . name }'];" ).join ()}
39
+ ${entity .properties .map (propertyBinding ).join ()}
40
40
return r;
41
41
}
42
42
)
43
43
""" ;
44
44
}
45
45
46
+ static String typedDataImportIfNeeded (ModelInfo model) {
47
+ if (model.entities
48
+ .any ((ModelEntity entity) => entity.properties.any (isTypedDataList))) {
49
+ return "import 'dart:typed_data';\n " ;
50
+ }
51
+ return '' ;
52
+ }
53
+
54
+ static bool isTypedDataList (ModelProperty property) {
55
+ return (property.dartFieldType == 'Uint8List' ||
56
+ property.dartFieldType == 'Int8List' );
57
+ }
58
+
59
+ static String propertyBinding (ModelProperty property) {
60
+ if (isTypedDataList (property)) {
61
+ return "r.${property .name } = members['${property .name }'] == null ? null : ${property .dartFieldType }.fromList(members['${property .name }']);" ;
62
+ } else {
63
+ return "r.${property .name } = members['${property .name }'];" ;
64
+ }
65
+ }
66
+
46
67
static String _queryConditionBuilder (ModelEntity entity) {
47
68
final ret = < String > [];
48
69
for (var prop in entity.properties) {
@@ -52,46 +73,48 @@ class CodeChunks {
52
73
String fieldType;
53
74
switch (prop.type) {
54
75
case OBXPropertyType .Bool :
55
- fieldType = " Boolean" ;
76
+ fieldType = ' Boolean' ;
56
77
break ;
57
78
case OBXPropertyType .String :
58
- fieldType = "String" ;
59
- break ;
60
- float:
61
- case OBXPropertyType .Double :
62
- fieldType = "Double" ;
79
+ fieldType = 'String' ;
63
80
break ;
64
81
case OBXPropertyType .Float :
65
- continue float;
66
- integer:
67
- case OBXPropertyType .Int :
68
- fieldType = "Integer" ;
82
+ case OBXPropertyType .Double :
83
+ fieldType = 'Double' ;
69
84
break ;
70
85
case OBXPropertyType .Byte :
71
- continue integer;
72
86
case OBXPropertyType .Short :
73
- continue integer;
74
87
case OBXPropertyType .Char :
75
- continue integer;
88
+ case OBXPropertyType . Int :
76
89
case OBXPropertyType .Long :
77
- continue integer;
90
+ case OBXPropertyType .Date :
91
+ case OBXPropertyType .DateNano :
92
+ case OBXPropertyType .Relation :
93
+ fieldType = 'Integer' ;
94
+ break ;
95
+ case OBXPropertyType .ByteVector :
96
+ fieldType = 'ByteVector' ;
97
+ break ;
98
+ case OBXPropertyType .StringVector :
99
+ fieldType = 'StringVector' ;
100
+ break ;
78
101
default :
79
102
throw InvalidGenerationSourceError (
80
- " Unsupported property type (${prop .type }): ${entity .name }.${name }" );
103
+ ' Unsupported property type (${prop .type }): ${entity .name }.${name }' );
81
104
}
82
105
83
- ret.add ("""
84
- static final ${name } = Query${fieldType }Property(entityId:${entity .id .id }, propertyId:${prop .id .id }, obxType:${prop .type });
85
- """ );
106
+ ret.add ('''
107
+ static final ${prop . name } = Query${fieldType }Property(entityId:${entity .id .id }, propertyId:${prop .id .id }, obxType:${prop .type });
108
+ ''' );
86
109
}
87
110
return ret.join ();
88
111
}
89
112
90
113
static String queryConditionClasses (ModelEntity entity) {
91
114
// TODO add entity.id check to throw an error Box if the wrong entity.property is used
92
- return """
115
+ return '''
93
116
class ${entity .name }_ {
94
117
${_queryConditionBuilder (entity )}
95
- }""" ;
118
+ }''' ;
96
119
}
97
120
}
0 commit comments