我基本上知道如何使用它们;例如,监听一个元素的onClick流.

但是,如何建立自己的流呢?

推荐答案

简单的示例

下面是一个完整的工作示例:

import 'dart:async';
import 'dart:io';

class Application {
  Stream onExit;
  
  Application() {
    // Create a stream controller and assign its stream to "onExit".
    var controller = new StreamController();
    onExit = controller.stream;

    // Create some class that uses our stream.
    new UserOfStream(this);
    
    // Whenever we exit the application, notify everyone about it first.
    controller.add('we are shutting down!');
    exit(0);
  }
}

class UserOfStream {
  UserOfStream(app) {
    app.onExit.listen((String message) => print(message));
  }
}

main() => new Application();

你也可以做一些很酷的事情,比如判断是否有controller.hasListenersignal an error的订户.请务必查看StreamController上的API文档.

您可以使用new StreamController.broadcast()来允许多个监听器.

用于复制粘贴器

下面是创建流的一种简单方法(复制粘贴程序的很棒的代码段):

class Something {
  StreamController _onExitController = new StreamController.broadcast();
  Stream get onExit => _onExitController.stream;
}

那么该类可以仅访问_onExitController来控制流(例如控制到.add()).

Dart相关问答推荐

dart中如何从xpath获取属性值?

停止从事件侦听器内部侦听事件

Flutter pod 安装问题 - # 的未定义方法 `each_child'

Flutter | Dart:URI的目标不存在

Flutter|Dart 创建匿名类

Bad state:在Flutter中从 addStream 添加项目时,您无法关闭主题

在 Dart 中定义一个接受参数的 getter

为什么使用Dart作为前端开发人员?

Flutter-创建一个倒计时(countdown)小部件

如何从JSON对象获取格式化/缩进的JSON字符串?

如何在没有脚手架的情况下显示snackBar

如何为 macos 桌面应用启用 Flutter 上网权限?

Dart Nodejs 和 Socketio

一个集合如何确定两个对象在dart中相等?

Dart 后期初始化final变量

dart中的max/mi int/double 值是否有常数?

具有 Maps 的 Null 感知运算符

启用空安全时,默认的List构造函数不可用.try 使用列表文字,List.filled或List.generate

Null aware函数调用运算符

如何在 Dart 中生成唯一 id