Dart 一条流可以一次听一次还是一般听一次?

Dart 一条流可以一次听一次还是一般听一次?,dart,flutter,bloc,Dart,Flutter,Bloc,我有一个StreamController: StreamController\u selectedWorkoutSubject=newstreamcontroller() 我在StreamBuilder中听到它,如下所示: StreamBuilder( stream: workoutBloc.selectedWorkoutStream, builder: (BuildContext context, AsyncSnapshot<Workout> snapshot) {

我有一个StreamController:

StreamController\u selectedWorkoutSubject=newstreamcontroller()

我在StreamBuilder中听到它,如下所示:

StreamBuilder(
  stream: workoutBloc.selectedWorkoutStream,
  builder: (BuildContext context, AsyncSnapshot<Workout> snapshot) {
    if (snapshot.hasData) {
      return ...
    } else {
      return Text('loading...');
    }
  }
);
但我正在试图理解为什么它不能像我最初那样工作。

尝试一些事情:

  • 设置流生成器的初始数据
  • 将StreamController更改为行为子对象(RxDart lib)
  • 我想第一条建议会帮助你,试试以下几件事:

  • 设置流生成器的初始数据
  • 将StreamController更改为行为子对象(RxDart lib)
  • 我认为第一条建议会帮助你,它不是“一次一条”。非广播流只能收听一次

    目前,我认为使用广播流是最好的选择。当广播流控制器停止具有侦听器并再次开始具有侦听器时,它确实会获得
    onCancel
    onListen
    事件,因此您可以避免在没有侦听器时执行工作

    令人恼火的是,没有一个流可以被多次收听,但它不是广播流。广播流将多个属性组合成一个概念,有时您需要一个只包含其中一些属性的流(例如,多次收听,但不一定向每个人发送相同的值)。

    它不是“一次一个”。非广播流只能收听一次

    目前,我认为使用广播流是最好的选择。当广播流控制器停止具有侦听器并再次开始具有侦听器时,它确实会获得
    onCancel
    onListen
    事件,因此您可以避免在没有侦听器时执行工作


    令人恼火的是,没有一个流可以被多次收听,但它不是广播流。广播流将多个属性组合成一个概念,有时您需要一个仅包含其中一些属性的流(例如,多次侦听,但不一定向每个人发送相同的值).

    我会发布更多的代码,包括您在哪里分配workoutBloc和那里的流。我会发布更多的代码,包括您在哪里分配workoutBloc和那里的流。
    StreamController<Workout> _selectedWorkoutSubject = new StreamController.broadcast();