You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter InAppWebView无控制台打印,网页与Flutter通信异常

问题原因与解决方案

核心问题

你把flutterInAppWebViewPlatformReady事件监听放在了按钮点击函数buttonClick内部——这个事件只会在WebView初始化完成时触发一次,第一次点击按钮时事件早已触发过,导致后续的callHandler代码根本不会执行。

修正步骤

1. 调整网页端代码

将事件监听移到全局作用域,确保WebView就绪时就完成初始化,点击按钮时直接调用通信方法:

<button onclick="buttonClick()" type="button">Cancel</button>

<script>
// 提前监听WebView就绪事件,初始化通信环境
window.addEventListener("flutterInAppWebViewPlatformReady", function(event) {
    console.log("Flutter WebView platform ready");
});

function buttonClick() {
    // 直接调用Flutter端的handler
    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!!');
        console.log('Flutter返回结果:', result);
    })
    .catch(function(error) {
        // 增加错误捕获,排查调用失败原因
        console.error('调用Flutter handler失败:', error);
    });
}
</script>

2. 确保Flutter端Handler正确注册

确认addJavaScriptHandler是在WebView创建完成后注册的,比如在onWebViewCreated回调中:

InAppWebView(
  onWebViewCreated: (controller) {
    // 在这里注册handler,确保WebView实例已初始化
    controller.addJavaScriptHandler(
      handlerName: "cancelbuttonState",
      callback: (args) async {
        print('Cancel Button clicked');
        print('收到网页参数:', args);
        return args.reduce((curr, next) => curr.toString() + next.toString());
      },
    );
  },
  initialUrlRequest: URLRequest(url: Uri.parse("你的网页地址")),
)

额外检查点

  • 确认Flutter项目中已正确依赖flutter_inappwebview包,版本无兼容性问题
  • 检查WebView的initialUrlRequest是否加载了正确的网页地址
  • 打开Flutter的控制台(flutter run的终端)和网页控制台(在WebView中长按选择"Inspect"),查看是否有报错信息

内容的提问来源于stack exchange,提问作者Abu Qudama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:39:51