代码之家  ›  专栏  ›  技术社区  ›  Newaj

如何在颤振中产生气流

  •  0
  • Newaj  · 技术社区  · 3 年前

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

    class CounterRepository {
      int _counter = 123;
    
      void increment() {
        _counter++;
      }
    
      void decrement() {
        _counter--;
      }
    
      Stream<int> watchCounter() async* {
        yield _counter;
      }
    }
    

    我期待随着的变化 _counter , watchCounter() 将生成更新的 counter 价值当我打电话时 increment() decrement() 从UI来看,似乎的值 柜台 正在发生变化,但是 watchCounter 不产生更新的 柜台 价值如何更新产量 柜台 这里的值?我正在使用 StreamBuilder 从UI获取流式数据。

    1 回复  |  直到 3 年前
        1
  •  1
  •   anirudh    3 年前

    您已经创建了 streams 使用-

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

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

    创建流

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

    使用该流

    stream.listen

    通过调用侦听函数订阅流并提供它 当有新的值可用时,可以调用一个函数。

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

    除了您的特定问题之外,还有许多其他方法可以控制和管理流 .listen 将完成这项工作。

        2
  •  0
  •   Bobby    2 年前

    你错过了一个无限while循环,它是一个手动流。

    Stream<dynamic> watchCounter() async* {
       while (true) {
          // you can change it to 5 seconds or higher
          await Future.delayed(const Duration(seconds: 1));
          yield _counter;
       }
    }
    

    然后你只需要打电话给listen:

    watchCounter().listen((value) {
      // hear can be empty if you want.
    });
    

    你可以把它放在你的init状态下运行,请不要把它放进你的小部件构建中。

    这应该很好用