Flutter_bloc无需用户界面事件即可从Firestore获取更新的数据

时间:2019-03-27 21:16:55

标签: flutter google-cloud-firestore bloc

我正在使用Flutter来交换少量设备的Firestore数据。

如果我使用StreamBuilder,一切正常,但是我不喜欢将业务逻辑与UI混合使用。我更喜欢使用flutter_bloc插件将BLOC用作模式。

introducir la descripción de la imagen aquí

但是flutter_bloc以这种方式工作:

步骤:

  1. 事件------------------------>新数据却没有新的UI事件

  2. 异步请求

  3. 异步响应

  4. 状态(mapEventToState)------->¿如何获取新状态?

由于没有从其他设备更新Firestore数据,因此我没有“ UI事件”,我无法更新状态。

我可以在bloc构造函数上使用类似的东西:

  Stream<QuerySnapshot> query;
  QuedadaBloc(){
    query = Firestore.instance.collection('my_collection').snapshots();
    query.listen((datos){  
      dispatch(Fetch()); // send fictitious UI event
    });
  }

但是我认为这不是正确的方法。

有什么建议吗?

非常感谢。

J。巴勃罗。

1 个答案:

答案 0 :(得分:2)

在使用Flutter,Bloc和Firestore时,建议的方法是让存储库层提供Firestore中的数据流,Bloc构造函数中的Bloc可以预订(或其他功能;请参见example)。

然后,根据流中的更改,当您从流中的Firestore接收新数据时,调度事件。当UI的更改触发状态更改时,Bloc可以处理触发的调度事件以类似的方式更改应用程序的状态。

managers.json

参考: Felix Angelov(Comment 1)的Comment 2felangel,是Bloc Gitter Chat中的flutter_bloc库创建者