searchLandmarkDetails static method
Populate details for landmarks from upper zoom levels.
Retrieves full details for landmarks selected from higher zoom levels of the map retrived via operations such as GemMapController.cursorSelectionLandmarks. Landmarks from text search already include all the details Does not work with user-created landmarks.
Parameters
results: List of Landmark objects for which to retrieve details.onComplete: Callback invoked when the operation completes. Provides:err: The result status. Possible values:- GemError.success: Details populated successfully.
- GemError.upToDate: Landmarks already have details.
- GemError.invalidated: Landmark is invalid (e.g., user-created).
Returns
- TaskHandler?: TaskHandler for this operation if it could be started; otherwise null.
See also:
- GemMapController.cursorSelectionLandmarks - Retrieve landmarks from map cursor selection.
Implementation
static TaskHandler? searchLandmarkDetails(
final List<Landmark> results,
final void Function(GemError err) onComplete,
) {
final EventDrivenProgressListener progListener =
EventDrivenProgressListener();
GemKitPlatform.instance.registerEventHandler(progListener.id, progListener);
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));
} else {
onComplete(GemErrorExtension.fromCode(err));
}
});
final LandmarkList resultsList = LandmarkList();
results.forEach(resultsList.add);
final OperationResult resultString = staticMethod(
'SearchService',
'searchLandmarkDetails',
args: <String, dynamic>{
'results': resultsList.pointerId,
'listener': progListener.id,
},
);
final GemError errorCode = GemErrorExtension.fromCode(
resultString['result'],
);
if (errorCode != GemError.success) {
onComplete(errorCode);
return null;
}
return TaskHandlerImpl(progListener.id);
}