Flutter

WebView_flutter 플러그인

Michelle Hwang 2021. 5. 3. 17:08

pub.dev/packages/webview_flutter

 

webview_flutter | Flutter Package

A Flutter plugin that provides a WebView widget on Android and iOS.

pub.dev

플러터에서 WebView 플러그인을 사용하면, 만들어 놓은 웹페이지를 플러터에서 사용할 수 있다. 

많이 사용하고 있는, 카카오 우편번호 검색 기능을 웹페이지에 만들어 놓고. 플러터에서 WebView 를 이용해 우편번호 검색 기능을 사용할 수 있다. 

postcode.map.daum.net/guide

 

Daum 우편번호 서비스

우편번호 검색과 도로명 주소 입력 기능을 너무 간단하게 적용할 수 있는 방법. Daum 우편번호 서비스를 이용해보세요. 어느 사이트에서나 무료로 제약없이 사용 가능하답니다.

postcode.map.daum.net

1. 먼저 카카오톡 가이드를 이용해서 우편번호 검색할 수 있는 웹페이지를 만든다. 

https://michellehwang001.github.io/study_html_css/javascript/

 

2. Flutter 에서 웹페이지를 호출한다.

WebView(
          initialUrl: 'https://michellehwang001.github.io/study_html_css/javascript/',
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController webViewController) {
            _webViewController = webViewController;
          },
          javascriptChannels: <JavascriptChannel>{
            _toasterJavascriptChannel(context),
          },
        ),

 

3. 웹페이지에 postMessage를 이용하여 Json데이터를 messageHandler로 보낸다. 

messageHandler.postMessage(JSON.stringify(data));

 

4. Flutter에 messageHandler를 작성한다.  name 속성값 이름과 html 이름이 동일해야 한다. 

  JavascriptChannel _toasterJavascriptChannel(BuildContext context) {
    return JavascriptChannel(
        name: 'messageHandler',
        onMessageReceived: (JavascriptMessage message) {
          Navigator.pop(context, message.message);
        });
  }

5. push한 메인 페이지에서 결과값을 받아야 하기에 비동기함수 처리 해 준다.

  _navigatePost(BuildContext context) async {
    final result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => Post()),
    );

    //print('result--> $result');

    // json 결과값 받기.
    Map<String, dynamic> zipcode = jsonDecode(result);

    postController.text = zipcode['roadAddress'];
    codeController.text = zipcode['zonecode'];
  }

 

6. 전달받은 json 값을 원하는 위치에 보여준다. 

 

참고.

flutter.dev/docs/cookbook/navigation/returning-data

 

Return data from a screen

How to return data from a new screen.

flutter.dev

 

'Flutter' 카테고리의 다른 글

Positioned / Positioned.fill  (0) 2021.05.25
[Error] Vertical viewport was given unbounded height  (0) 2021.05.20
Provider 사용하기.  (0) 2021.05.08
Elevated button 모서리 둥글게  (0) 2021.04.16
Widgets  (0) 2021.03.22