如何从 JavaScript 监听器创建 Dart Stream

Posted

技术标签:

【中文标题】如何从 JavaScript 监听器创建 Dart Stream【英文标题】:How to create a Dart Stream from a JavaScript listener 【发布时间】:2013-12-23 00:25:25 【问题描述】:

我想创建一个 Stream,它应该包含与以下代码中的回调相同的元素:

chromeTabs['onUpdated'].callMethod('addListener', 
    [(tabId, changeInfo, tab) => print("tabId = $tabId")]);

我阅读了 Chris Buckett 的教程/文章,但不确定是否可以在第一个 Consumer 到来时创建 Stream 元素。在上面的代码中,这意味着当 Dart Stream 被监听时注册 javascript 监听器。

由于在初始化之前引用了 updateStreamController,以下代码无法运行:

var updateStreamController = new StreamController<int>(onListen: () =>
    chromeTabs['onUpdated'].callMethod('addListener', [(tabId, changeInfo, tab) => 
        updateStreamController.add(tabId)]);`

很遗憾,onListen 属性只能通过构造函数设置。

提前感谢您的帮助

【问题讨论】:

【参考方案1】:

您可以在初始化之前简单地声明变量:

var updateStreamController;
updateStreamController = new StreamController<int>(onListen: () => 
    chromeTabs['onUpdated'].callMethod('addListener', 
        [(tabId, changeInfo, tab) => updateStreamController.add(tabId)]));

【讨论】:

以上是关于如何从 JavaScript 监听器创建 Dart Stream的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javascript 调用 Dart 函数?

从 Dart 调用 javascript

如何在 Dart 2 中限制 TextEditingController 侦听器事件 - Flutter

如何在Dart 2中限制TextEditingController侦听器事件 - Flutter

如何从我的简单.dart文件创建插件以在Flutter中使用?

从 Javascript 中的事件侦听器调用访问对象的属性