searchCountries static method
Search for countries by name.
Performs a top-level address search restricted to country-level results. Useful to obtain a country-level Landmark that can be used as a parent for further hierarchical searches in search.
Parameters
filter: Filter string applied to country names. If empty, returns all countries (subject to engine limits).onComplete: Callback invoked when the search completes. It provides:err: The resulting GemError code for the operation.landmarks: List of matching landmarks (empty on failure).
Returns
- TaskHandler?: Associated TaskHandler if the search can be started; otherwise null.
Also see:
- getNextAddressDetailLevel - Determine valid next detail levels for a given parent landmark.
- getCountryLevelItem - Get country-level landmarks by ISO code.
Implementation
static TaskHandler? searchCountries(
final String filter,
final void Function(GemError err, List<Landmark> landmarks) onComplete,
) {
final EventDrivenProgressListener progListener =
EventDrivenProgressListener();
GemKitPlatform.instance.registerEventHandler(progListener.id, progListener);
final LandmarkList results = LandmarkList();
final Landmark emptyParent = Landmark();
progListener.registerOnCompleteWithData((
final int err,
final String hint,
final Map<dynamic, dynamic> json,
) {
GemKitPlatform.instance.unregisterEventHandler(progListener.id);
if (err == GemError.success.code || err == GemError.reducedResult.code) {
onComplete(GemErrorExtension.fromCode(err), results.toList());
} else {
onComplete(GemErrorExtension.fromCode(err), <Landmark>[]);
}
});
final OperationResult resultString = staticMethod(
'GuidedAddressSearchService',
'search',
args: <String, dynamic>{
'results': results.pointerId,
'parent': emptyParent.pointerId,
'filter': filter,
'detailToSearch': AddressDetailLevel.country.id,
'progress': progListener.id,
},
);
final int errorCode = resultString['result'];
if (errorCode != GemError.success.code) {
onComplete(GemErrorExtension.fromCode(errorCode), <Landmark>[]);
return null;
}
return TaskHandlerImpl(progListener.id);
}