note11g / flutter_naver_map

Naver Mobile Dynamic Map SDK for Flutter (unofficial)
BSD 3-Clause "New" or "Revised" License
136 stars 65 forks source link

오버레이의 클릭리스너가 설정되지 않았음에도, 클릭 이벤트가 발생하는 문제 #96

Closed note11g closed 9 months ago

note11g commented 1 year ago

현재 설계에서는 오버레이의 클릭리스너를 설정하지 않아도, 무조건 Native Side에서 Channel을 통해 클릭 이벤트를 보내고 있습니다. 이는, 다각형 오버레이나 지상 오버레이 등에서 오버레이 클릭 이벤트를 지정하지 않고, onMapTapped 이벤트를 받고 싶은 경우에 문제가 발생할 수 있습니다.

현재 생각하고 있는 해결법은 다음과 같습니다.

  1. 클릭 리스너 등록 여부를 Native Side에 전달한다.
  2. Native Side는 클릭 리스너 등록 여부에 따라, 이벤트로 전달하는 콜백을 등록하지 않는다.
johmartin commented 11 months ago

너무나 잘 사용하고 있습니다. 감사드립니다. ^^ flutter naver map 1.0.2 버전을 사용하여 앱 개발 중입니다.

위의 이슈 사항이 혹시 언제쯤 처리된 버전이 출시될지 알 수 있을까요?

polygon 클릭했을때 해당 클릭포인트의. 위경도를 알 수 없으므로 해당 polygon의 클릭 이벤트를 설정하지 않고 onMapTapped 이벤트를 이용하여 해당 클릭포인트의 위경도를 알고 싶은데.. polygon이 계속 이벤트를 가로채버리니....답답하네요

NaverMap 의 GestureDetector onTapDown을 이용하여 screenLocationToLatLng 를 통한 포인트 <=> 위경도 변환으로 깔끔하게 처리가 안되네요 아래의 이유로 인하여...

  1. onTapDown과 onMapTapped 이벤트의 반응 속도가 다름
  2. screenLocationToLatLng 를 통한 포인트 <=> 위경도 변환이 뭔가가 오차가 있거나.. 클릭포인트 영역의 이슈가 있는지..뭔가 잘 안되네요..

결론적으로...위의 이슈 사항이 해결되어야 깔끔한 개발이 가능할거 같습니다.

버전 업데이트가 되기를 학수고대 해봅니다..ㅠㅠ

note11g commented 11 months ago

@johmartin 안녕하세요. 먼저, 사용해주셔서 감사드립니다. 혹시 개발 일정이 많이 급하신 상황이실까요? 제가 런칭을 앞두고 있어, 유지보수가 현재는 조금 어려운 상황입니다. 빠르면 10월 4주차쯤 이슈 수정을 시도해볼 수 있을 것 같습니다. 많이 급하신 상황이라면, note11@kakao.com으로 메일 부탁드리겠습니다. 감사합니다.

johmartin commented 11 months ago

안녕하세요? 바쁘신데도 답변 주셔서 감사드립니다. 당연히 서비스 론칭 하시는데 집중하셔야죠 ^^ 저도 한달 정도 후에는 서비스 론칭을 준비 해야 할것 같네요 혹시나 시간적 여유가 되신다면 한달 정도 후에는 업데이트 되면 좋겠다는 기대를 해봅니다. 뭔가 제가 빚 받는 느낌인거 같아서 정말 죄송 스럽습니다. ㅠㅠ 앞두신 서비스 론칭 성공리에 마무리 하시길 기원해봅니다.

개발자에게 있어서 항상 두고 두고 썰 풀수 있는게... 불가능한 상황에서 미친 개발을 통한 성공처럼? 보이는 서비스 론칭 아닐까 합니다.

화이팅 입니다. ^^

note11g commented 9 months ago

Summary

터치 핸들러 (setOnTapListener로 설정)가 설정되지 않아도, 오버레이가 지도의 터치를 소비해버리는 문제.

Cause

이는 Native Side에서 항상 터치 이벤트를 오버레이 우선으로 소비하고 있기 때문.

받아서 처리할지 말지는 Dart Side의 setOnTapLinstener가 nullable이므로 null일 경우 받아도 처리하지 않는 방법을 채택하고 있음.

Solution

바로 적용할 수 있는 방법 두가지가 있다.

  1. Overlay.onClickListener에서 false 를 반환하여 오버레이가 터치되어도 소비되지 않고 onMapTapped가 실행되도록 한다.

    https://navermaps.github.io/android-map-sdk/reference/com/naver/maps/map/overlay/Overlay.OnClickListener.html

  2. NOverlay.setOnTapListener가 non-null일 때 / null 일때마다 설정값을 NOverlaySender를 통해 보낸다. 이후, Native Side에서 해당 터치 오버레이 전달 여부를 결정한다.