Unact / yandex_mapkit

Flutter implementation of YandexMapkit
MIT License
132 stars 151 forks source link

При отмене сессии YandexSearch.searchByPoint получаю MissingPluginException - No implementation found for method cancel... #348

Closed egorozh closed 1 month ago

egorozh commented 3 months ago

Здравствуйте,

Подскажите, пожалуйста, Ловлю ошибку - MissingPluginException(No implementation found for method cancel on channel yandex_mapkit/yandex_search_session_8) при попытке отмены сессии через session.session.cancel();

Делаю ради синхронизации, чтобы отменять запрос на сервер при частом вызове(при перемещении карты). Возможно трактую неправильно использование api.

Пример кода:

    final session = YandexSearch.searchByPoint(
        point: target,
        zoom: zoom,
        searchOptions: const SearchOptions(
          searchType: SearchType.geo,
        ));

    final completer = CancellableCompleter<SearchSessionResult>(
      cancellationToken,
      onCancel: () {
        session.session.cancel();
      },
    );

    if (cancellationToken?.isCancelled != true) {
      session.result.then((result) => completer.complete(result),
          onError: (Object error, StackTrace stackTrace) => completer.completeError(
                error,
                stackTrace,
              ));
    }

    final addresses = await completer.future;

    final firstAddress = addresses.items?.firstOrNull;

Либа с CancellationToken - https://pub.dev/packages/cancellation_token

DCrow commented 3 months ago

Добрый день!

Такого не должно происходить, тут бага в текущей либе. В ближайшем будущем будет исправлена.

egorozh commented 2 months ago

С getSuggestions наблюдается та же проблема. На всякий случай фиксирую тут =)

 final session = YandexSuggest.getSuggestions(
        text: searchText,
        boundingBox: BoundingBox(
          northEast: Point(latitude: region.northEast.lat, longitude: region.northEast.long),
          southWest: Point(latitude: region.southWest.lat, longitude: region.southWest.long),
        ),
        suggestOptions: const SuggestOptions(suggestType: SuggestType.geo));

    final result = await session.result.asCancellable(cancellationToken, onCancel: () => session.session.close());
DCrow commented 2 months ago

Да, там везде одна проблема. В YandexDriving и YandexBicycle тоже присутствует.

DCrow commented 1 month ago

Исправлено в новой версии