【问题标题】:Merging streams of different types into one将不同类型的流合并为一个
【发布时间】:2021-09-22 20:54:49
【问题描述】:

我认为这将是一个愚蠢的问题,但我还是要问。

我可以使用 StreamZip() 来合并 2 个不同类型的流吗?

我已将 table_calendar 集成到我的 Flutter 应用程序中,但我通过为事件创建特定的集合和数据结构来做到这一点。这是事件数据模型:

  final String? eventName;
  final DateTime? eventStartTime;
  final String? eventDuration;
  final DateTime? eventDate;
  final String? eventDescription;
  final String? agentId;
  final String? agencyId;

但是,我意识到我想将另一个集合中的日期添加到 table_calendar 中,并将它们作为标记显示在网格和日历网格下方的列表中。

这是第二个收集数据模型:

  final String? trxnId;
  final String? clientFName;
  final String? clientLName;
  final String? contractDate; // THIS IS A DATE
  final String? sellerDisclosure24a; // THIS IS A DATE
  final String? dueDiligence24b; // THIS IS A DATE
  final String? financing24c; // THIS IS A DATE
  final String? settlement24d; // THIS IS A DATE
  final String? inspectionDate; // THIS IS A DATE
  final String? appraisalDate; // THIS IS A DATE
  final String? closingDate; // THIS IS A DATE
  final String? walkThroughDate; // THIS IS A DATE

我需要知道我是否可以创建 2 个流并将它们组合起来。我在想,为了在 table_calendar 网格中显示标记,我真正需要的是事件的日期。对于日历网格下方的事件列表,我需要日期,标题将是数据字段名称(即 SellerDisclosure24a),第二个模型的 startTime 可以为空,描述可以是客户的名字和姓氏,持续时间可以为空第二个模型。因此,如果我将它们组合在一起,则第二个模型中的 8 个数据字段中的每一个都需要成为流中自己的条目。

这可能吗?

我希望这是有道理的。请让我知道它是否像泥一样清澈。

【问题讨论】:

    标签: flutter google-cloud-firestore stream


    【解决方案1】:

    您可以将不同类型的流与StreamZip 结合使用。您需要做的就是将列表中的流传递给StreamZip 并使用map 方法组合您的数据。您甚至可以使用它创建一个简单的方法来轻松组合流:

    Stream<C> combineStreams<A, B, C>(
      Stream<A> a,
      Stream<B> b,
      C Function(A, B) combiner,
    ) {
      return StreamZip([a, b]).map<C>((values) => combiner(values[0] as A, values[1] as B));
    }
    
    

    以下是您将如何使用它:

    // Combine Event Stream and Other Stream
    final Stream<Result> stream = combineStreams<Event, Other, Result>(
      // Event Stream
      myEventStream,
      // Other Stream
      myOtherStream,
      // Function that combines the event of streams
      (event, other) {
        // Create a new model from event model and other model
        return Result(event, other);
      },
    );
    
    // Subscribe to stream event
    stream.listen((result) => print(result));
    

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2022-06-29
      • 2016-08-05
      • 1970-01-01
      • 2021-01-21
      • 2014-10-12
      • 2019-10-07
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多