一起使用flutter bloc库和websockets的设计建议

Posted

技术标签:

【中文标题】一起使用flutter bloc库和websockets的设计建议【英文标题】:Design recommendations for using flutter bloc library and websockets together 【发布时间】:2020-06-06 13:21:33 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

您可以使用 BlocBuilder:

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

谈the official todo example:

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

【讨论】:

socket代码应该放在哪里?我认为你应该更清楚答案。我曾尝试将 socket codr 放入 costructor 的体内。但它不起作用。

以上是关于一起使用flutter bloc库和websockets的设计建议的主要内容,如果未能解决你的问题,请参考以下文章

将flutter_bloc与tabview一起使用

如何将 Flutter Bloc 与 Firebase 电话身份验证一起使用

Flutter BLOC 和 Provider 如何注册在一起

flutter_bloc 4.0.0如何获取事件属性参数。

Flutter - 关闭小部件时 BLoC 流实例会导致内存泄漏吗?

如何在 BLOC 的 Flutter 中的 BottomNavigationBar 中设置 currentIndex?