Flutter(Web)如何监听javascript事件或将javascript数据传递给flutter?

Posted

技术标签:

【中文标题】Flutter(Web)如何监听javascript事件或将javascript数据传递给flutter?【英文标题】:Flutter (Web) how to listen to javascript event or pass javascript data to flutter? 【发布时间】:2020-09-26 19:03:17 【问题描述】:

我目前正在编写一个 Flutter Web 应用程序,并正在创建一个全屏按钮,该按钮使页面全屏并编辑页面,以便在单击时最大化容器。这个按钮通过跟踪一个名为“isfullscreen”的布尔值来工作,它在颤动中编辑 ui 并通过调用 dart:js 的 javascript 函数来最大化浏览器窗口。此按钮工作正常,并且允许用户在单击时退出全屏,并且所有内容都重置为默认值。但是,如果用户单击全屏按钮,然后手动离开全屏(f11 键,浏览器上的 esc 键),flutter 不会接收事件并且网页的内容被破坏(isfullscreen=true 但浏览器不是全屏)。是否可以a)在flutter中监听javascript事件,或者b)监听javascript事件,然后以某种方式将数据传递给flutter网页,以便当用户手动退出全屏而不单击按钮时布尔isfullscreen = false ? 感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以在事件发生时在您的 js 代码中发布消息

window.parent.postMessage('any message', "*");

并在你的飞镖代码中听它

@override
void initState() 
  super.initState();

  //setup listener ---------------------------------
  window.addEventListener("message", (event) 
    MessageEvent event2 = event;
    print(event2.data);
  );
  //------------------------------------------------


【讨论】:

飞镖代码中的window 是什么?我应该使用什么进口?哦,我猜是 dart:html @StackUnderflow 你说得对,它是import 'dart:html';

以上是关于Flutter(Web)如何监听javascript事件或将javascript数据传递给flutter?的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter web中监听(“关闭”事件)文件下载窗口?

Flutter Web 监听通过 iFrame 发布的事件

Flutter:如何实时监听权限

如何向 Flutter.EventChannel 添加多个监听器?

如何在 Flutter 应用中监听和处理 POST 请求

如何监听状态属性变化 Flutter bloc 模式