【问题标题】:How to generate stream in flutter如何在颤动中生成流
【发布时间】:2021-09-12 06:52:37
【问题描述】:

我正在用颤振流做一些实验。我有一个生成int 流的类。这是课程:

class CounterRepository {
  int _counter = 123;

  void increment() {
    _counter++;
  }

  void decrement() {
    _counter--;
  }

  Stream<int> watchCounter() async* {
    yield _counter;
  }
}

我预计随着_counter 的变化,watchCounter() 将产生更新的counter 值。当我从 UI 调用 increment()decrement() 时,_counter 的值似乎正在改变,但 watchCounter 不会产生更新后的 _counter 值。如何在此处生成更新的_counter 值?我正在使用 UI 中的StreamBuilder 来获取流式数据。

【问题讨论】:

  • 使用StreamController - 更多:dart.dev/articles/libraries/creating-streams
  • 如何在watchCounter() 中添加incrementdecrement 的事件?你能解释一下吗?
  • void increment() =&gt; ctrl.add(++_counter);Stream&lt;int&gt; watchCounter() =&gt; ctrl.stream;
  • 谢谢。还有一个问题,在这种情况下,我应该什么时候关闭StreamController
  • State.dispose 方法中?

标签: flutter flutter-streambuilder


【解决方案1】:

您已使用 -

创建了您的 streams
Stream<int> watchCounter() async* {
    yield _counter;
}

但要反映流的变化,您需要接收这些流事件。您可以使用StreamController

控制这些流事件

创建流

Future<void> main() async {
  var stream = watchCounter();
}

使用该流

stream.listen

通过调用listen函数订阅流并提供它 有一个新值可用时回调的函数。

stream.listen((value) {   
print('Value from controller: $value');
}); 

还有许多其他方法可以控制和管理流,但对于您的特定问题,.listen 可以胜任。

【讨论】:

  • 是的,我必须使用StreamControllerstream.listen 我认为是在 StreamBuilder 内部完成的。
  • @Newaj 是的,如果您使用的是StreamControllers。但我只是在告诉写流 n 东西的方法
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2022-11-02
  • 2022-08-17
  • 2020-12-02
  • 1970-01-01
  • 2018-12-01
  • 2020-04-13
  • 1970-01-01
相关资源
最近更新 更多