【问题标题】:How does Streambuilder work when it receives a stream?Streambuilder 在收到流时如何工作?
【发布时间】:2021-07-11 06:37:40
【问题描述】:

由于我想并行处理多个流,我对 Streambuilder 的工作原理很感兴趣。我是否正确理解当 Streambuilder 接收到流时,它会更新构建方法?

目前,当 Streambuilder 接收到一个流时,它每次都会更新整个小部件的状态。我认为它只会更新 streambuilder 中的子 Widget(在本例中为 Text),而不是完整的小部件。

  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          StreamBuilder<Map>(
              stream: NumberCreator().stream,
              builder: (context, snapshot) {
                return Text(snapshot.data['test']);
              }),
          StreamBuilder<Map>(
              stream: OtherCounter().stream,
              builder: (context, snapshot) {
                return Text(snapshot.data['test2']);
              }),
        ],
      ),
    );
  }

我想在有状态小部件的堆栈中使用多个流构建器。将流构建器外包给他们自己的无状态小部件更好还是推荐的架构是什么?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以将 StreamBuilders 视为管道、电线或连接器。在一个“端有数据”和另一个“端是事件触发”。这里的“事件触发器”是指用户请求数据。 Stream builder是异步系统,只要它接收到用户输入并且可以检索数据,它就会自动运行。所以对我来说,不管你怎么说,只要你达到你想要的就更好了?最好或推荐的方法是在你完成代码后实施,这样你就不会头疼了

    【讨论】:

    • 谢谢。 Streambuilder 只重建它的孩子,对吗?所以 Streambuilder 1 不能重建 Streambuilder 2 的文本,对吗?
    • 是的,它只适用于流构建器负责处理的小部件
    • 但在我的情况下,它也重建了这个堆栈中的其他小部件。我做错了什么?
    • 您将堆栈放在同一个 Stream 中还是将 Stream 放在另一个 Stream 中?
    • 因为我们使用的是“单订阅流”。意味着一个控制一切的流。如果您想要多个流,则称为“消息流”。 “单订阅流”是最常见的一种。在您的情况下,这就是所有小部件都由 1 个流更新的原因。尝试谷歌“消息流”以获得使用多个流的正确方法。我只知道如何申请“单订阅流”
    猜你喜欢
    • 2023-03-18
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2019-05-23
    相关资源
    最近更新 更多