Unact / yandex_mapkit

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

Zoom on onMapCreated not working #245

Closed tologonkudaiberdiuulu closed 1 year ago

tologonkudaiberdiuulu commented 1 year ago

If it's only on me not working move camera on create? At first create(that's in onMapCreated function) it's not working zooming. I tried with _controller.moveCamera( CameraUpdate.newCameraPosition( CameraPosition( target: positionPoint, zoom: 17, ), ), )

and with _controller.moveCamera( CameraUpdate.newCameraPosition( CameraPosition(target: positionPoint), ), ); _controller.moveCamera(CameraUpdate.zoomTo(17)); . I don't know if I'm making something wrong. Think I'm not. But after first creation, if i make move, it's working fine. P.S. I am using latest version

tologonkudaiberdiuulu commented 1 year ago

@DCrow это баг или вы так задумали? Если баг это надо исправить если, так было задумано то мне кажется надо изменить поведение карты. Я попробовал вот так:

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final List<MapObject> mapObjects = [];
  late YandexMapController controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Expanded(
            flex: 4,
            child: Container(
              color: Colors.white,
              child: YandexMap(
                mapObjects: mapObjects,
                onMapCreated: (ctrlr) {
                  setState(() {
                    controller = ctrlr;
                  });
                  ctrlr.moveCamera(
                    CameraUpdate.newCameraPosition(
                      const CameraPosition(
                        target: Point(
                          latitude: 42.871959,
                          longitude: 74.596901,
                        ),
                        zoom: 15,
                      ),
                    ),
                  );
                },
              ),
            ),
          ),
        ],
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      floatingActionButton: GestureDetector(
        onTap: () {
          controller.moveCamera(
            CameraUpdate.newCameraPosition(
              const CameraPosition(
                target: Point(
                  latitude: 42.871959,
                  longitude: 74.596901,
                ),
                zoom: 15,
              ),
            ),
          );
        },
        child: Container(
          width: 40,
          height: 40,
          alignment: Alignment.center,
          decoration: const BoxDecoration(
            color: Colors.amber,
            shape: BoxShape.circle,
          ),
          child: const Text(
            'P',
            style: TextStyle(
              color: Colors.red,
              fontSize: 18,
            ),
            textAlign: TextAlign.center,
          ),
        ),
      ),
    );
  }
}

При инициализации карты moveCamera(или т.д. функции) не работают. Только после отрисовки карты, после нажатия кнопки. Вроде до последней обновлении все работало

DCrow commented 1 year ago

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

На данным момент в мастере такой проблемы не вижу.

koteesy commented 1 year ago

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

На данным момент в мастере такой проблемы не вижу.

У нас примерно такая же ситуация, как это выглядит:

return Observer(builder: (ctx) {
  if (iap.mapProvider == "google") {
    return GoogleMapsProvider();
  }

  return YandexMapsProvider();
});

Если переключать это условие, например, c google карты на yandex - в таком случае controller.moveCamera не отрабатывает, хотя там указываются правильные координаты

НО если изначально в iap.mapProvider будет yandex, то controller.moveCamera отлично отработает

tologonkudaiberdiuulu commented 1 year ago

@DCrow вот здесь можете попробовать https://github.com/tologonkudaiberdiuulu/test-yandex-map.git

tologonkudaiberdiuulu commented 1 year ago

@DCrow или мастер(у вас же в данный момент только 1 ветка же) и то что на pub.dev отличаются?

DCrow commented 1 year ago

@tologonkudaiberdiuulu Вы используете версию из pub.dev.

Мастер и pub.dev отличаются, в мастере лежат все самые последнии изменения, которые не обязательно еще есть на pub.dev. Каждая версия pub.dev отмечается тегом в репозитории.

koteesy commented 1 year ago

Здравствуйте! На данным момент в мастере такой проблемы не вижу.

У нас примерно такая же ситуация, как это выглядит:

return Observer(builder: (ctx) {
  if (iap.mapProvider == "google") {
    return GoogleMapsProvider();
  }

  return YandexMapsProvider();
});

Если переключать это условие, например, c google карты на yandex - в таком случае controller.moveCamera не отрабатывает, хотя там указываются правильные координаты

НО если изначально в iap.mapProvider будет yandex, то controller.moveCamera отлично отработает

Поставил из github вместо pub.dev, проблема решилась... ( но тут же так же указана 3.0.0.. )

tologonkudaiberdiuulu commented 1 year ago

@koteesy плюсую. Тоже поставил ссылкку на гит, все норм работает. Спс @DCrow ! Закрою issue как только обновиться pub dev ). А так пусть люди в курсах будут )

DCrow commented 1 year ago

@koteesy Здесь логика такая: Мастер рабочая ветка в ней находятся все изменения. Каждая версия(начиная с 2.0.0) помечается тегом. Версия 3.0.0 помечена для коммита 9a7888169741d1cb70b2affe3593526fd70d66f8 Все изменения до этого входят в эту версию, остальные уже не входят, и попадут в следующую.

DCrow commented 1 year ago

Обновил версию на pub.dev