结合使用 flutter bloc 库和 websockets 的设计建议

Design recommendations for using flutter bloc library and websockets together

我们有一个 Flutter 应用程序,它使用 websockets 进行服务器发起的通信。我们使用 flutter_bloc 作为整个应用程序的状态管理机制。 UI 事件通过 Bloc 状态转换和 BlocBuilder 小部件传送到小部件。

另一个要求是,有些小部件应该根据通过 websocket 从服务器接收到的特定事件重新呈现。

StreamBuilder 是对 websocket 上接收到的事件做出反应的自然方式。但不确定将其合并到使用 Blocs 的 uI 小部件中的最佳方式。

当 Bloc 和 websocket 通道一起使用时,希望社区提供关于清晰地构建代码的意见。

您可以使用 BlocBuilder:

  • 在您的 bloc 中侦听 websocket 消息并添加新的 bloc 事件
  • bloc 事件持有 websocket 消息
  • mapEventToState 中,您的事件被映射到包含消息内容的新 bloc 状态

谈论the official todo example

  • 您收到一条 websocket 消息,表明添加了新的待办事项
  • 您添加了一个新的 bloc 事件TodoAdded(message)
  • mapEventToState 中将待办事项添加到待办事项列表并生成新状态 TodosLoadSuccess(todos)
  • 由于 BlocBuilder UI 应该会自动重建