Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с определением координат пользователя #202

Closed
abigotado opened this issue Mar 11, 2022 · 4 comments · Fixed by #207
Closed
Labels
question Further information is requested

Comments

@abigotado
Copy link

При запуске карты координаты пользователя поначалу определяются где-то возле Африки.

Снимок экрана 2022-03-11 в 19 58 20

По нажатию кнопки запускаю функцию смены позиции - экран перемещается к реальным координатам, однако метка пользователя вместе с экраном не перемещается.

Снимок экрана 2022-03-11 в 19 58 43

Пример кода:

Кнопка:

FloatingActionButton.small(
                    onPressed: () async {
                      final CameraPosition _userPosition =
                          await _controller.getUserCameraPosition();
                      await _controller.moveCamera(
                        CameraUpdate.newCameraPosition(
                          CameraPosition(
                            target: _userPosition.target,
                          ),
                        ),
                      );
                    },
)

Карта:

YandexMapController _controller;
YandexMap(
              onMapCreated: (YandexMapController controller) async {
                _controller = controller;
                await _controller.toggleUserLayer(visible: true);
              },
              onUserLocationAdded: (UserLocationView view) async {
                view = view.copyWith(
                  pin: view.pin.copyWith(
                    opacity: 1.0,
                  ),
                  arrow: view.pin.copyWith(isVisible: false),
                  accuracyCircle:
                      view.accuracyCircle.copyWith(isVisible: false),
                );
                return view;
              },
            ),

Возможно, проблема в iOS-эмуляторе, так как на Android-устройстве всё в порядке, метка перемещается, как только обновляются координаты пользователя.
При этом самое странное, что на эмуляторе проблема лечится вот таким костылём:

YandexMap(
              onMapCreated: (YandexMapController controller) async {
                _controller = controller;
                await _controller.toggleUserLayer(visible: true);
                **await _controller.toggleUserLayer(visible: false);
                await _controller.toggleUserLayer(visible: true);**
              },
              onUserLocationAdded: (UserLocationView view) async {
                view = view.copyWith(
                  pin: view.pin.copyWith(
                    opacity: 1.0,
                  ),
                  arrow: view.pin.copyWith(isVisible: false),
                  accuracyCircle:
                      view.accuracyCircle.copyWith(isVisible: false),
                );
                return view;
              },
            ),

То есть выключением и повторным включением UserLayer.

@DCrow
Copy link
Collaborator

DCrow commented Mar 18, 2022

Добрый день!

Не удается воспроизвести описанную проблему на эмуляторе iOS.
Возможно проблема, в том как вы обновляете местоположение на эмуляторе?

@DCrow DCrow added the question Further information is requested label Mar 18, 2022
@AndreyCh1989
Copy link

аналогичная проблема на адроид эмуляторе

@abigotado
Copy link
Author

abigotado commented Mar 30, 2022

Добрый день!

Не удается воспроизвести описанную проблему на эмуляторе iOS. Возможно проблема, в том как вы обновляете местоположение на эмуляторе?

@DCrow Добрый день! У меня при запуске экрана с картой сразу почему-то метка юзера в Африке появляется. И там и зависает навсегда на iOS-эмуляторе. На Андроиде через какое-то время перепрыгивает на реальные координаты (хотя не всегда) на iOS - только если обновить весь экран.

При запуске такой функции метка юзера остаётся в Африке, как и была (хотя экран центрируется на реальной позиции):

Future<void> getUserPosition(BuildContext context, {double zoom}) async {
    if (await Permission.location.isDenied) {
      _showMessage(
        context,
        Text(
            'Чтобы увидеть своё местоположение, разрешите отслеживать геопозицию'),
      );
    } else {
      final CameraPosition _userPosition =
          await _controller.getUserCameraPosition();
      if (_userPosition != null) {
        await _controller.moveCamera(
          CameraUpdate.newCameraPosition(
            CameraPosition(
              target: _userPosition.target,
              zoom: zoom,
            ),
          ),
        );
      } else {
        getUserPosition(context, zoom: zoom);
      }
    }
  }
  YandexMapController _controller;
onMapCreated: (YandexMapController controller) async {
                    _controller = controller;
}

Или единственный способ обновить метку - вызвать обновление состояния всей карты? Хотя и в этом случае метка порой так и остаётся висеть в районе Африки.

@DCrow
Copy link
Collaborator

DCrow commented Mar 30, 2022

Исправил в мастере. Теперь должно сразу отображать точку пользователя в нужном месте.

PS. Исправлено и для Android

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants