Flutter與H5同步登錄態(tài)之cookie、channel方式

本文使用的是Flutter官方的webview_flutter組件,對(duì)Flutter與h5同步登錄態(tài)的兩種方式介紹。

一、使用cookie的方式

H5代碼如下,通過document.cookie獲取cookie。

  <!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="utf-8">
    <title>Flutter向H5傳遞數(shù)據(jù)-通過URL</title>
</head>
<body>
    <button id="btn" style="font-size: 2.5em">獲取數(shù)據(jù)</button>
    <button id="btnGetCookie" style="font-size: 2.5em">獲取cookie</button>
    <div id="resultTxt" style="font-size: 2.5em"></button>
        <script type="text/javascript">
            //獲取cookie
            var btnGetCookie = document.getElementById("btnGetCookie");
            btnGetCookie.addEventListener('click', function () {
                var cookie = document.cookie;
                document.getElementById('resultTxt').innerHTML = '獲取到的cookie:' + cookie;
            }, false)
            //獲取URL中的數(shù)據(jù)
            var btn = document.getElementById("btn");
            btn.addEventListener('click', function () {
                //通過URL向H5傳遞數(shù)據(jù)
                const params = new URLSearchParams(window.location.search);
                var name = params.get('name');
                document.getElementById('resultTxt').innerHTML = '從URL中獲取到的數(shù)據(jù):' + name;
            }, false)
        </script>
</body>
</html>

Flutter代碼如下,設(shè)置cookie的值,用于在H5獲取。

  ///設(shè)置cookie
  void _onSetCookie(BuildContext context) async {
    //可以連續(xù)設(shè)置多次cookie
    await cookieManager.setCookie(const WebViewCookie(
      name: 'token', //cookie的名字
      value: 'asssdddfff', //cookie的值
      domain: 'cwq.com', //指定給對(duì)應(yīng)的域名設(shè)置cookie
      path: '/', //域名下的路徑,可以缺省,若設(shè)置一個(gè)具體的path,那么只有這個(gè)path下的網(wǎng)址才可以獲取到設(shè)置的cookie
    ));
    //也可在Flutter中獲取cookie
    final Object cookies =
        await controller.runJavaScriptReturningResult('document.cookie');
    debugPrint(cookies.toString());
  }

一、通Channel的方式

H5代碼,

<script type="text/javascript">
     var btn = document.getElementById("btn");
     btn.addEventListener('click', function () {
     //通過注冊(cè)的getLoginInfo channel向flutter發(fā)送消息
     getLoginInfo.postMessage("");
    }, false)
   function cwqCallJs(msg) {
        document.getElementById('resultTxt').innerHTML = 'Flutter傳遞過來的登錄信息:' + msg;
   }
</script>

Flutter代碼,通過addJavaScriptChannel添加Channel監(jiān)聽,并通過runJavaScript返回給H5

controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..addJavaScriptChannel('getLoginInfo',
          onMessageReceived: (JavaScriptMessage message) {
        //獲取到H5需要登錄信息的調(diào)用
        var info = {'token': "qwwejdsfd", 'uid': "3233"};
        var infoString = json.encode(info);
        controller.runJavaScript("cwqCallJs('$infoString')"); //將登錄信息傳遞個(gè)H5
      });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容