javascript - 使用 HtmlElementView Widget 时如何触发函数?
问题描述
我正在尝试widget.onTap()
在以下代码中调用函数 ()
GestureDetector(
onTap: () {
widget.onTap()
},
child: Container(
height: 1.9 * widget.height,
width: 1.2 * widget.width,
child: HtmlElementView(viewType: 'liquid-button', key: UniqueKey(),),
),
)
我已经注册了我的“液体按钮”
ui.platformViewRegistry.registerViewFactory('liquid-button', (int viewId) {
var element = html.IFrameElement()
..style.border = 'none'
..srcdoc = """
<!DOCTYPE html>
<head>
</head>
<body>
<svg class="liquid-button"
...
"""
return element;
});
问题是无论我尝试什么,我都无法从用户那里捕获任何东西。GestureDetector 不起作用,按钮也不起作用。我可以在 JS 中触发一些代码,但我需要在 Dart 中处理它。这可能吗 ?
解决方案
我刚刚找到了这个的解决方法。所以基本上,我们可以利用window.localStorage,它可以从flutter和html中访问,并在flutter中添加监听器来处理window.localStorage的任何变化
在颤振中添加监听器
最终存储 webLocalStorage = window.localStorage;
htmlListener(){ String buttonClicked = webLocalStorage["buttonClicked"]; if(buttonClicked=="yes"){ //做任何事情 }else{ Future.delayed(Duration(milliseconds: 100), (){ htmlListener(); }); } }
对 HTML 中的网络存储进行一些更改
var webLocalStorage = window.localStorage; webLocalStorage["buttonClicked"] = "是";
反之亦然,那就是从 html 中听,在颤动中改变。
推荐阅读
- javascript - 使用手动控制时如何修复自动幻灯片放映的时间间隔
- java - 如何使用线程运行两个 JOptionPane
- python - “没有名为 openpyxl 的模块”,尽管安装了模块,但无法导入事件。我从来没有遇到过其他模块的这个问题
- java - 如何在 SpringBoot 2.0 应用程序中打印 spring 数据源值
- c# - UWP StreamSocket 客户端在较大数据传输后未收到响应
- tensorflow-transform - 如何在生产(流式传输管道)中重用 TFX 转换进行推理?
- google-app-engine - 谷歌应用引擎标准环境上的 Dialogflow 客户端
- sql - 排序日期时间 varchar
- sql-server - 从以二进制形式存储的 Mssql 服务器数据库中检索图像
- hadoop - Hadoop与数据库有何不同?