Flutter Bloc用肘听流并发射状态

3qpi33ja  于 2023-01-18  发布在  Flutter
关注(0)|答案(2)|浏览(138)

如何使用Cubit侦听流并发出状态?
使用Bloc,我们可以执行以下操作:

on<VideoStreamPlayPauseEvent>(
      (event, emit) async {
        if (event.play) {
          await emit.forEach(
            videoStreamingRepo.videoDataStream,
            onData: (VideoData videoStreamData) => VideoStreamState(
              currentFrame: videoStreamData,
              isPlaying: true,
            ),
          );
        }
dgiusagp

dgiusagp1#

您应该使用listen()侦听stream,并基于event,您可以emit所需的状态。

yourstream.listen((event) {
      if (event.play)
          emit(First State)
      else
          emit(Second State)
    });
额外:根据提问者的需求
要停止侦听流:
StreamSubscription<Map<PlaceParam, dynamic>> subscription;
subscription = yourstream.listen((event) {
      if (event.play)
          emit(First State)
      else
          emit(Second State)

      ...
   
      subscription.cancel(); 👈 cancel this way
    });
k97glaaz

k97glaaz2#

我的最终结果是

enum ConnectionStatus { unknown, connected, disconnected, poor }

class ConnectionCubit extends Cubit<ConnectionStatus> {
  ConnectionCubit() : super(ConnectionStatus.unknown);
  late final StreamSubscription<ConnectivityResult> _streamSubscription;

  void checkConnection() async {
    _streamSubscription = Connectivity().onConnectivityChanged.listen((event) {
      if (event == ConnectivityResult.mobile ||
          event == ConnectivityResult.wifi) {
        emit(ConnectionStatus.connected);
      } else {
        emit(ConnectionStatus.disconnected);
      }
    });
  }

  @override
  Future<void> close() {
    _streamSubscription.cancel();
    return super.close();
  }

相关问题