Flutter Bloc发出流完成时如何处理

zc0qhyus  于 2023-03-31  发布在  Flutter
关注(0)|答案(2)|浏览(160)
await emit.onEach(
// This stream, how do you handle when this stream is done?
stream, 
onData: (data){

      }
);

通常在Flutter Stream上我们有一个onDone回调,但是在emit onEach或forEach flutter块回调上,onDone不存在。
目前我的解决方案是

final broadCastStream = stream.asBroadcastStream();
broadCastStream.listen(
          (event) {},
          onDone: () {
          // Handle on Done
          },
        );
await emit.onEach(
broadCastStream, 
onData: (data){

      }
);

我想在流完成/取消/错误时发出一个新状态

5jdjgkvh

5jdjgkvh1#

future在调用onDone时完成。

emit
.onEach(stream, onData: (val) => print(val))
.then((value) => print('onDone'))
.onError((error, stackTrace) => print('error'));
m2xkgtsf

m2xkgtsf2#

你可以考虑直接监听stream。并使用onErroronDonecancelOnError回调。
来自文档:Stream-listen

StreamSubscription<T> listen(
void onData(
T event
)?,
{Function? onError,
void onDone()?,
bool? cancelOnError}
)

示例:

final streamSubscription = stream.listen(
  (data) {
    // handle data
  },
  onError: (error) {
    // handle error
  },
  onDone: () {
    // handle completion
    emit(MyState(isStreamCompleted: true));
  },
);

await emit.onCancel(() {
  streamSubscription.cancel();
});

相关问题