我想了解流如何在 flutter 中与 bloc 模式一起工作?

I want to understand how streams work with bloc pattern in flutter?

emit.forEach() 是做什么的?据我了解,它需要一个流,但是 ui rebuild 本身如何以及 onData 参数是什么?我想 return 客户端矩阵 sdk

的数据流
  on<StartMatrixEventSubmitted>((event, emit) async {
      emit(MatrixLoadingState());
      await repo.getAllRooms().then((value) async {
        await emit.forEach(
          value.onSync.stream,
          onData: (value2) {
            print('data');
            return MatrixSuccuClientState(rooms: value.rooms);
          },
        );
        this.myRooms = value.rooms;
        emit(MatrixClientSynced());
      });
    });

这里描述了 emit.forEachdocs 中的作用:

Subscribes to the provided stream and invokes the onData callback when the stream emits new data and the result of onData is emitted.

基本上,它与 List 的 .map() 方法相同。列表中的每个数据(元素)都将转换为另一个值。例如:对象到字符串

emit.forEach 有两个值:它必须监听的流和 onData 函数。它将侦听流发出的所有值并将它们转换为另一个值(在本例中为 MatrixSuccuClientState)。 将 onData: (value2) 中的 value2 视为列表中的 "element[index]"value2 是流的当前发射值。我想你要找的是:

onData: (currentlyEmittedValue) => MatrixSuccuClientState(rooms: currentlyEmittedValue.rooms),

我建议在继续讨论 bloc 之前了解 Streams in flutter。我建议看这个 video. After that, you could learn how bloc works in this dev page