Estaba estableciendo comunicación entre el sitio web y Flutter. Quiero enviar un mensaje al hacer clic en el botón y he implementado el código a continuación.
<button onclick="buttonClick()" type="button">Cancel</button> <script> function buttonClick() { window.addEventListener("flutterInAppWebViewPlatformReady", function(event) { window.flutter_inappwebview.callHandler('cancelbuttonState', 1, true,['msg','CancelbuttonClicked'], {test:'Go-Back'}).then(function(result) { alert("Hello! Cancel Buttton clicked!!"); console.log('Hello! Cancel Buttton clicked!!'); }); }); } </script>en flutter side he implementado lo siguiente para recibir el mensaje
controller.addJavaScriptHandler( handlerName: "cancelbuttonState", callback: (args) async { print('Cancel Button clicked'); return args.reduce((curr, next) => curr + next); });pero tanto JavaScript como la aplicación no me dan las gracias de impresión de la consola.
Está ejecutando la siguiente línea demasiado tarde dentro del cuerpo de la función de cancelación. Deberá agregar el oyente mucho antes para que se registre la devolución de llamada.
En otras palabras, estás escuchando un evento que ya terminó.
window.addEventListener("flutterInAppWebViewPlatformReady" .....Reorganice su código de manera similar a esto:
<button onclick="buttonClick()" type="button">Cancel</button> <script> isAppReady = false; window.addEventListener("flutterInAppWebViewPlatformReady", function (event) { isAppReady = true; }); function buttonClick() { if (isAppReady) { window.flutter_inappwebview.callHandler('cancelbuttonState', 1, true, ['msg', 'CancelbuttonClicked'], { test: 'Go-Back' }).then(function (result) { alert("Hello! Cancel Buttton clicked!!"); console.log('Hello! Cancel Buttton clicked!!'); }); } } </script>