首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不含StreamController的RxDart初始值

不含StreamController的RxDart初始值
EN

Stack Overflow用户
提问于 2018-11-16 22:37:41
回答 2查看 4.3K关注 0票数 4

我用的是StreamControllers和颤振。我有一个具有一些默认值的模型。从我正在侦听流的小部件中,我想提供一些这些默认值。我可以看到我可以在StreamBuilder上设置一个初始值,但是我想使用来自集团内部模型的数据作为初始数据。因此,一旦有人使用快照数据,他们就会得到默认值。我已经看到RxDart有一个种子值,只是想知道这是否有可能而无需用RxDart替换?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-17 08:18:37

你要找的是StreamController#add方法,

发送数据事件。 侦听器在以后的微任务中接收此事件。 请注意,同步控制器(通过将true传递到StreamController构造函数的同步参数创建)将立即传递事件。由于这种行为违反了这里提到的契约,所以应该只使用文档中描述的同步控制器,以确保交付的事件始终显示为在单独的microtask中交付的事件。

欢快飘舞

票数 4
EN

Stack Overflow用户

发布于 2022-01-17 11:29:38

在为流添加侦听器后初始化类时,可以指定流的默认值。

代码语言:javascript
复制
import 'dart:async';

enum CounterEvent { increase }

class CounterBloc {
  int value = 0;

  final _stateCntrl = StreamController<int>();
  final _eventCntrl = StreamController<CounterEvent>();

  Stream<int> get state => _stateCntrl.stream;
  Sink<CounterEvent> get event => _eventCntrl.sink;

  CounterBloc() {
    _eventCntrl.stream.listen((event) {
      _handleEvent(event);
    });
    _stateCntrl.add(value); // <--- add default value
  }

  void dispose() {
    _stateCntrl.close();
    _eventCntrl.close();
  }

  _handleEvent(CounterEvent event) async {
    if (event == CounterEvent.increase) {
      value++;
    }
    _stateCntrl.add(value);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53346332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档