Перейти к основному содержимому

Общие принципы

Отложенные результаты​

Некоторые методы SDK (например, методы, которые обращаются к удалённому серверу) возвращают отложенные результаты в виде Future или CancelableOperation в случаях, когда может быть важно отменить запрос. Для работы с ними создайте обработчик получения данных и обработчик ошибок.

Пример получения объекта из справочника:

import 'package:dgis_mobile_sdk/dgis.dart' as sdk;

// Создать объект для поиска по справочнику
searchManager = sdk.SearchManager.createOnlineManager(context);

// Получить объект из справочника по идентификатору
final objects = await searchManager.searchByDirectoryObjectIds([objectId]).value;
final object = objects.isEmpty ? null : objects.first;

Подробнее о работе со справочником объектов см. в разделе Справочник.

Потоки значений​

Некоторые объекты SDK предоставляют потоки значений, которые можно обработать. На поток значений можно подписаться, указав функцию-обработчик данных. От потока можно отписаться, когда обработка данных больше не требуется. Для работы с потоками значений используется интерфейс Channel.

Подписка на Channel возвращает StreamSubscription.

Пример подписки на изменение видимой области карты (поток новых прямоугольных областей):

import 'dart:async';

import 'package:dgis_mobile_sdk/dgis.dart' as sdk;

class SampleState extends State<Widget> {
late final sdk.Context sdkContext;
late final sdk.MapWidgetController mapWidgetController;
StreamSubscription<sdk.GeoRect>? visibleRectSubscription;

@override
void initState() {
super.initState();
sdkContext = sdk.DGis.initialize();
mapWidgetController = sdk.MapWidgetController(sdkContext);
_subscribeToVisibleRect();
}

Future<void> _subscribeToVisibleRect() async {
final map = await mapWidgetController.mapAsync;
visibleRectSubscription = map.camera.visibleRectChannel.listen((geoRect) {
debugPrint("Current rect: ${geoRect}");
});
}

@override
void dispose() {
visibleRectSubscription?.cancel();
super.dispose();
}
...
}