Closed Sangjun-man closed 1 year ago
Name | Link |
---|---|
Latest commit | 7556ad71605b7556b25e0e8c55580f44d4d308f8 |
Latest deploy log | https://app.netlify.com/sites/hipspot-webview/deploys/63f11217c4b7c30008c25a4e |
Deploy Preview | https://deploy-preview-54--hipspot-webview.netlify.app/ |
Preview on mobile | Toggle QR Code...Use your smartphone camera to open QR code link. |
To edit notification comments on pull requests, go to your Netlify site settings.
Motivation
플러터에 현재 위치 좌표를 요청하고, 현재 위치 좌표 값을 받아 해당 위치로 맵을 이동시킵니다
내 현재 위치 마커 구현
플러터 통신 코드 구현
맵 이동 코드 구현
Key Changes
플러터 -> 웹으로 통신하는 경우, 데이터를 전달하는 것이 아닌 flutter의 웹뷰컨트롤러에서 직접 함수를 실행하는 방식입니다.
위의 코드를 보면 알 수 있듯
runJavaScript('window.flutterChannel(...)')
같은 형태입니다. postMessage로 string값을 전달하는게 아니라, eval()처럼 문자열 형태의 코드를 파싱하고 실행시켜 주는 것 같습니다 ( @sjsjsj1246 죄송 스트링값을 데이터로 전달하는게 아닙니더..)이전 커밋에서 웹 -> 플러터로 통신하던 방법은, flutter에서 특정 string 값을 채널 명으로 하여 채널을 생성하게 되면 웹에서는 해당 채널에 쟈window[채널명].postMessage로 데이터를 전달하는게 가능했습니다.
ex) flutter에서 'flutterChannel' 이라는 채널 생성 -> 웹에서 window.flutterChannel.postMessage()로 플러터에 데이터 전송
플러터 -> 웹 통신을 구현 하기 위해, 웹에서는 플러터에서 runJavascript로 실행시킬 수 있는 함수를 window에 전역변수로 등록하는데 이 함수명이 플러터에서 등록한 채널명과 동일한 경우, 플러터에서 생성한 채널이 웹에서 작성한 핸들러 함수로 덮어씌워져서, 웹 -> 플러터로 postMessage 보낼 수 있는 채널이 사라지게 되었습니다
flutter에서 'flutterChannel' 채널생성 -> 웹에서 window.flutterChannel = flutterMessageHandler 로 덮어쓰기 -> window.flutterChannel.postMessage() 불가능
따라서 웹 -> 플러터 통신을 위해 기존에 사용하던 채널명인 'flutterChannel'이 아닌 'jsChannel' 이라는 값으로 웹 -> 플러터로 postMessage 할 수 있는 새로운 채널을 개설하였습니다
제안사항
flutterChannel -> appToWebAction
/jsChannel -> webToAppChannel
정도로 바꿔보면 어떨까요?? 더 좋은 네이밍이 분명 있을거같은데,, 다른 의견도 주시면 좋겠습니다~!
스크린샷
https://user-images.githubusercontent.com/66112027/219881010-10457606-bf53-4211-873e-bb8f5544331f.mov
https://user-images.githubusercontent.com/66112027/219881014-f6ef37cb-4de1-4604-bb09-d92d790e2ebf.mov
To Reviewers