Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Dart中创建流?_Dart - Fatal编程技术网

如何在Dart中创建流?

如何在Dart中创建流?,dart,Dart,我基本上知道如何使用它们;例如,侦听元素的onClick流 但是,如何设置自己的流呢?简单的示例 下面是一个完整的工作示例: 导入'dart:async'; 导入“dart:io”; 班级申请{ 奥涅西特河; 应用程序(){ //创建流控制器并将其流分配给“onExit”。 var controller=新的StreamController(); onExit=controller.stream; //创建一些使用我们的流的类。 流的新用户(this); //当我们退出应用程序时,首先通知所有人

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

但是,如何设置自己的流呢?

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

导入'dart:async';
导入“dart:io”;
班级申请{
奥涅西特河;
应用程序(){
//创建流控制器并将其流分配给“onExit”。
var controller=新的StreamController();
onExit=controller.stream;
//创建一些使用我们的流的类。
流的新用户(this);
//当我们退出应用程序时,首先通知所有人。
controller.add('我们正在关闭!');
出口(0);
}
}
类UserOfStream{
UserOfStream(应用程序){
app.onExit.listen((字符串消息)=>打印(消息));
}
}
main()=>新应用程序();
您还可以做一些很酷的事情,比如检查是否有使用
controller.hasListener的订户,或者您也可以。请务必检查上的API文档

您可以使用新的StreamController.broadcast()
来允许多个侦听器

用于复制粘贴器 下面是创建流的一种简单方法(复制粘贴程序的伟大片段):

分类{
StreamController _onExitController=新的StreamController.broadcast();
Stream get onExit=>\u onExitController.Stream;
}

然后类就可以访问
\u onExitController
来控制流(例如
.add()
)。

我刚刚创建了一个名为的新Dart库,以便更轻松地在类上创建自定义事件。以下是一个例子:

class ClassWithEvents实现NotifyPropertyChanged{
字符串_someProperty;
最终事件流_onPropertyChangedEvent=新事件流();
Stream get-onPropertyChanged=>\u-onPropertyChangedEvent.Stream;
最终事件流_onClosedEvent=新事件流();
Stream get onClosed=>\u onClosedEvent.Stream;
字符串get someProperty=>\u someProperty;
设置someProperty(字符串值){
_onPropertyChangedEvent.signal(新的PropertyChangedEventArgs('someProperty',value));
_someProperty=值;
}
关闭(){
_onClosedEvent.signal();
}
}
main(){
var c=新类WithEvents();
c、 onPropertyChanged.listen((PropertyChangedEventArgs args)=>print('changed:name=${args.propertyName}值=${args.value}');
c、 onClosed.listen(())=>print('closed');
c、 someProperty=“test”;
c、 close();
}

除了
StreamController
之外,您还可以直接用一个命名构造函数实例化

  • Stream.fromFuture()
    返回触发一个事件的流(无论
    Future
    完成什么)

  • Stream.fromIterable()
    返回将
    Iterable
    元素转换为事件序列的流

  • Stream.periodic()
    返回定期触发计算事件的流


这非常方便,因为您可以编写预期使用流的代码,但对于如何向该类提供事件,您有多种选择。例如:
Stream.fromIterable()
可以在单元测试中用于向一个类触发已知的事件序列,否则该类通常会从文件中读取数据事件。

StreamController最近将其默认行为切换为只接受一个侦听器。如果要允许多个侦听器,请将“new StreamController”更改为“new StreamController.broadcast”。(这是针对最前沿的。Trunk目前仍称其为“StreamController.multiSubscription”)。流用户应该知道,单订阅流和广播流之间存在一些显著差异。请参阅。请注意,
Stream
StreamController
是泛型
StreamController
提供了一个
示例。我得到:
关闭dart.core.sink的实例