我基本上知道如何使用它们;例如,监听一个元素的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相关问答推荐

使用arm64v8/DART Docker映像进行编译时不支持DART镜像

捕获一个区域中的所有期货

ListView 不会刷新,而附加列表会刷新 (Flutter)

Card宽度与父级匹配

Flutter:是否可以有多个 Futurebuilder 或一个 Futurebuilder 用于多个 Future 方法?

Flutter 中带有导航栏的永久视图

如何在 Flutter 中忽略整个文件的 lint 规则?

如何在Flatter中更改复选框边框 colored颜色 ?默认情况下,它显示为黑色,但我希望它显示为灰色

在 Windows 10 中使用 Android Studio 时没有Remove Widget选项

IndexedDB访问速度和效率

如何在Flatter中的press/finger/mouse/cursor位置显示菜单

使用where在对象列表中搜索 dart 中的特定对象

如何创建一个对话框,能够接受文本输入并在Flutter中显示结果?

参数类型Map Function()不能分配给参数类型Map

dart2js代码比javascript快多少?

Dart:打印整数和字符串

我应该如何在 Dart 中测试 Future?

Dart 脚本会在浏览器中本地运行吗?

如何在 Dart 中连接两个字符串?

了解工厂构造函数代码示例