首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cubit观察流(BLoC库)?

使用Cubit观察流(BLoC库)?
EN

Stack Overflow用户
提问于 2021-02-02 09:20:08
回答 1查看 3.1K关注 0票数 9

TL;DR:有一种使用Cubit而不是BLoC监听流和发出状态的方法吗?

我使用BLoC库进行颤振,我们使用Cubit进行状态管理。到目前为止,对于获取数据或保存数据的交互来说,一切都是正常的,但是现在我需要处理流。在我的例子中,这意味着从FirebaseFirestore观看快照。

我试着搜索互联网,如果有方法观察Cubit的流,而不是使用BLoC,但大多数结果都指向了BLoC。我在另一个项目中使用过BLoC,所以我知道如何使用它来观察流,但是如果有方法的话,我想使用Cubit

下面是我在FireStore中观察到的代码的示例:

代码语言:javascript
复制
@override
  Stream<Either<Failure, List<MTalk>>> watchTalk() async* {
    const path ='path/to/talks';
    yield* firestore
        .collection(path)
        .snapshots()
        .map(
          (snap) => right<Failure, List<MTalk>>(
            snap.docs
                .map(
                    (documentSnapshot) => MTalk.fromFirestore(documentSnapshot))
                .toList(),
          ),
        )
        .onErrorReturnWith((e) {
      if (e is FirestoreException) {
        return left(RetrieveFailure(message: e.message));
      } else {
        return left(UnknownFailure(message: e.toString()));
      }
    });
  }
}

在使用BLoC时,只要从调用watchTalk()返回数据,就可以简单地使用async*yield返回状态,因为mapEventToState()也是生成State的流。在Cubit的情况下,我们使用emit(MyState)获取UI中的状态,并且函数不是Stream类型的。我想知道的是,我们是否可以使用Cubit来处理流。

EN

回答 1

Stack Overflow用户

发布于 2021-02-28 06:03:30

如果有人像我一样被弄糊涂了,那就很简单了。您可以在每次从流中获得值时调用侦听您的cubit并发出状态。下面是我的代码使用DataConnectionChecker侦听网络连接更改的示例

代码语言:javascript
复制
///Listens to the connectivity of
Future<void> listenToConnectivity() async {
  if (_internetStream != null) {
    await _internetStream.cancel();
  }
  _internetStream = repo.isConnectedToInternet().listen((result) {
    result.fold(
      (failure) => _processFailure(failure: failure),
      (isConnected) {
        if (isConnected) {
          emit(const SessionState.connected());
        } else {
          emit(const SessionState.disconnected());
        }
      },
    );
  });
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66006767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档