Use postMessage to sent two Strings from js to Flutter

486 Views Asked by At

I use webview_flutter in Flutter, and I use it to show html. I can transfer a String to Flutter use the following js code: JS:

function test()
{
    alert("xxxxx");
    window.jsBridge.postMessage("test name");
}

Flutter:

return Scaffold(
      appBar: AppBar(
        title: Text('Webview Example'),
      ),
      body: WebView(
        // 加载html文件夹下的test.html
        initialUrl: 'file:///android_asset/flutter_assets/html/test.html',
        javascriptMode: JavascriptMode.unrestricted,
        onWebViewCreated: (controller) async{
          _webViewController = controller;
          // var s = await _webViewController.evaluateJavascript(
          //     'window.addEventListener("message", (event,event1) => {Toaster.postMessage(JSON.stringify(event.data,event1.data));}, false);');
          // print(s);
        },
        onPageFinished: (url) async{
          try {
            var s = await _webViewController.runJavascript(
                'window.addEventListener("message", (event) => {jsBridge.postMessage(JSON.stringify(event.data));}, false);');
          } on Exception catch (e) {
            // TODO
          }
          // print(s);
        },
        javascriptChannels: {
          JavascriptChannel(
              name: 'jsBridge',
              onMessageReceived: (message) {
                print('jsBridge : ${message.message}');
              })
        },
      ),
    );

But! This code can only transfer ONE String, some html pages need to transfer two Strings, like this:

window.jsBridge.postMessage("test name","test data");

I can not get any message from Flutter if transfer two Strings.

Now I am puzzling about this, can you help me?

By the way, I can not edit html code, because all the websites transfer two strings. I can only edit Flutter part.

I tried to use Android java to do that, but I want to get the goal using pure dart.

0

There are 0 best solutions below