@@ -3,6 +3,15 @@ import 'package:nitrite/nitrite.dart';
33import 'package:nitrite_spatial/src/geom_utils.dart' ;
44import 'package:nitrite_spatial/src/indexer.dart' ;
55
6+ /// Copies NitriteFilter context (nitriteConfig, collectionName, objectFilter) from source to target
7+ void _copyFilterContext (NitriteFilter source, NitriteFilter target) {
8+ if (source.nitriteConfig != null ) {
9+ target.nitriteConfig = source.nitriteConfig;
10+ target.collectionName = source.collectionName;
11+ target.objectFilter = source.objectFilter;
12+ }
13+ }
14+
615/// The abstract base class for all spatial filters in Nitrite.
716///
817/// A spatial filter is used to query Nitrite database for
@@ -63,7 +72,10 @@ class _GeometryValidationFilter extends FieldBasedFilter {
6372 try {
6473 var geometryString = fieldValue['geometry' ] as String ? ;
6574 if (geometryString != null ) {
66- documentGeometry = GeometrySerializer .deserialize (geometryString);
75+ var deserialized = GeometrySerializer .deserialize (geometryString);
76+ if (deserialized != null ) {
77+ documentGeometry = deserialized;
78+ }
6779 }
6880 } catch (e) {
6981 return false ;
@@ -129,12 +141,7 @@ class WithinFilter extends NitriteFilter implements FlattenableFilter {
129141 geometry,
130142 (docGeom, filterGeom) => docGeom.within (filterGeom),
131143 );
132- // Copy context if available
133- if (nitriteConfig != null ) {
134- validationFilter.nitriteConfig = nitriteConfig;
135- validationFilter.collectionName = collectionName;
136- validationFilter.objectFilter = objectFilter;
137- }
144+ _copyFilterContext (this , validationFilter);
138145 return validationFilter.apply (doc);
139146 }
140147
@@ -172,12 +179,7 @@ class IntersectsFilter extends NitriteFilter implements FlattenableFilter {
172179 geometry,
173180 (docGeom, filterGeom) => docGeom.intersects (filterGeom),
174181 );
175- // Copy context if available
176- if (nitriteConfig != null ) {
177- validationFilter.nitriteConfig = nitriteConfig;
178- validationFilter.collectionName = collectionName;
179- validationFilter.objectFilter = objectFilter;
180- }
182+ _copyFilterContext (this , validationFilter);
181183 return validationFilter.apply (doc);
182184 }
183185
@@ -224,12 +226,7 @@ class NearFilter extends NitriteFilter implements FlattenableFilter {
224226 bool apply (Document doc) {
225227 // For non-indexed queries, apply the validation filter directly
226228 var validationFilter = _NearValidationFilter (field, center, radius);
227- // Copy context if available
228- if (nitriteConfig != null ) {
229- validationFilter.nitriteConfig = nitriteConfig;
230- validationFilter.collectionName = collectionName;
231- validationFilter.objectFilter = objectFilter;
232- }
229+ _copyFilterContext (this , validationFilter);
233230 return validationFilter.apply (doc);
234231 }
235232
@@ -278,7 +275,10 @@ class _NearValidationFilter extends NitriteFilter {
278275 try {
279276 var geometryString = fieldValue['geometry' ] as String ? ;
280277 if (geometryString != null ) {
281- documentGeometry = GeometrySerializer .deserialize (geometryString);
278+ var deserialized = GeometrySerializer .deserialize (geometryString);
279+ if (deserialized != null ) {
280+ documentGeometry = deserialized;
281+ }
282282 }
283283 } catch (e) {
284284 return false ;
0 commit comments