如何使用 rxdart 获取 Stream<String> 中的最后一个值?

Posted

技术标签:

【中文标题】如何使用 rxdart 获取 Stream<String> 中的最后一个值?【英文标题】:how to get last value in a Stream<String> using rxdart? 【发布时间】:2019-06-26 18:26:48 【问题描述】:

我有一个包含字符串值的流,我想获取该字符串中的最后一个值。最好的方法是什么?

  Stream<String> get searchTextStream 
    return _searchController.stream.transform(
      StreamTransformer<String, String>.fromHandlers(
        handleData: (value, sink) 
          if (value.isEmpty || value.length < 4) 
            sink.addError('please enter some text..');
           else 
            sink.add(value);
          
        ,
      ),
    );
  

【问题讨论】:

您可能正在寻找BehaviourSubject。 pub.dartlang.org/documentation/rxdart/latest/rx/… 【参考方案1】:

从这里https://pub.dartlang.org/packages/rxdart 获取 rxDart 包。

import 'package:rxdart/rxdart.dart'; // 1. Import rxDart package.
final _searchController = BehaviorSubject<String>();  // 2. Initiate _searchController as BehaviorSubject in stead of StreamController.

String _lastValue = _searchController.value; // 3. Get the last value in the Stream.

BehaviorSubject 是一个 Object rxDart 包。 它像 StreamController 一样工作,默认情况下,broadcast() 处于打开状态,并且 BehaviorSubject 比 StreamController 具有更多功能。

【讨论】:

如果有人遇到同样的问题:rxdart 包中似乎有一个重大变化,您不能再在 BehaviorSubject 上直接使用 .value 了。您将不得不使用“_searchController.valueWrapper.value”

以上是关于如何使用 rxdart 获取 Stream<String> 中的最后一个值?的主要内容,如果未能解决你的问题,请参考以下文章

从 Stream 获取当前值

Rxdart combinelaststream 功能不起作用

Flutter状态管理:RxDart

Flutter状态管理:RxDart

Flutter 类型“Future<dynamic>”不是“Stream<PostModel>”类型的子类型?

如何做一个 switchmap 或任何更好的方法来替换 RxDart 中的值