rxdart 0.22.6

  • Readme
  • Changelog
  • Example
  • Installing
  • 100

RxDart #

Build Status codecov Pub Gitter

About #

RxDart是基于ReactiveX的 Google Dart的反应式功能编程库.
Google Dart随附了非常不错的Streams API. RxDart并未尝试提供此API的替代方法,而是在其之上添加了功能.

Version #

在0.15.x版本,0.16.x版本不再向下兼容之前,都支持Dart 1.0,并且需要Dart SDK 2.0

How To Use RxDart #

For Example: Reading the Konami Code #

void main() {
  const konamiKeyCodes = const <int>[
    KeyCode.UP,
    KeyCode.UP,
    KeyCode.DOWN,
    KeyCode.DOWN,
    KeyCode.LEFT,
    KeyCode.RIGHT,
    KeyCode.LEFT,
    KeyCode.RIGHT,
    KeyCode.B,
    KeyCode.A];

  final result = querySelector('#result');
  final keyUp = Observable<KeyboardEvent>(document.onKeyUp);

  keyUp
    .map((event) => event.keyCode)
    .bufferCount(10, 1)
    .where((lastTenKeyCodes) => const IterableEquality<int>().equals(lastTenKeyCodes, konamiKeyCodes))
    .listen((_) => result.innerHtml = 'KONAMI!');
}

API Overview #

Objects #

Observable #

RxDart的Observables扩展了Stream类. 这有两个主要含义:

最后,Observable类和运算符是StreamStreamTransformer类的简单包装. 所有基础实现都可以与Observable类一起使用,并且可以在各自的库中公开. 它们链接到下面.

Instantiation #

一般来说,创建新的Observable可以通过使用顶级构造函数new Observable()包装Dart Stream来完成,也可以通过在Observable类上调用工厂方法来完成. 但是为了更好地支持Dart的强模式,将combineLatestzip拆分为固定长度的构造函数. 这些方法作为静态方法提供,因为Dart的工厂方法不支持泛型类型.

Usage #
var myObservable = new Observable(myStream);

Available Factory Methods #

Usage #
var myObservable = new Observable.merge([myFirstStream, mySecondStream]);
Available Static Methods #
Usage #
var myObservable = Observable.combineLatest3(
    myFirstStream, 
    mySecondStream, 
    myThirdStream, 
    (firstData, secondData, thirdData) => print("$firstData $secondData $thirdData"));

Transformations #

Available Methods #

通过检查DartDocs ,可以查看所有方法和属性的完整列表,包括Dart Stream API提供的方法和属性(例如firstasyncMap等).

Usage #
var myObservable = new Observable(myStream)
    .bufferCount(5)
    .distinct();

Examples #

Web和命令行示例可在example文件夹中找到.

Web Examples #

为了运行网络示例,请按照以下步骤操作:

  1. 克隆此仓库并进入目录
  2. Run pub get
  3. Run pub run build_runner serve example
  4. 在浏览器中导航到http:// localhost:8080 / web /

Command Line Examples #

In order to run the command line example, please follow these steps:

  1. 克隆此仓库并进入目录
  2. Run pub get
  3. Run dart example/example.dart 10

Flutter Example #

Install Flutter #

为了运行flutter示例,您必须安装Flutter. 有关安装说明,请参阅在线文档 .

Run the app #

  1. 打开Android模拟器,iOS模拟器,或连接适当的移动设备进行调试.
  2. 打开一个终端
  3. cd进入example/flutter/github_search目录
  4. 运行Flutter flutter doctor以确保您具有所有Flutter依赖项.
  5. Run flutter packages get
  6. Run flutter run

Notable References #

Changelog #

请参考变更日志以获取所有发行说明.

0.22.6 #

  • 错误修正:多次侦听以Error开头的BehaviorSubject时,它将发出重复事件.
  • Linter:现在使用public_member_api_docs,我们在需要的地方添加了额外的文档.

0.22.5 #

  • 错误修正:DeferStream创建流太早
  • Bugfix: TimerStream created Timer too early

0.22.4 #

  • 错误修正:switchMap控制器不再过早关闭

0.22.3 #

  • 错误修正:仅Flutter生产中的whereType失败

0.22.2 #

  • 错误修正:使用播种的BehaviorSubject并添加Error ,在侦听时, BehaviorSubject发出null而不是最后一个Error .
  • 错误修正:在switchMap之后调用cancel可能导致NoSuchMethodError .
  • Updated Flutter example to match the latest Flutter release
  • 由于PetrusNguyễnTháiHọc(@ hoc081098), Observable.withLatestFrom现在已扩展为接受2个或更多Stream
  • 弃用ofType ,而支持whereType ,然后放下TypeToken .

0.22.1 #

修复了以下问题:

  • 带有scan和BehaviorSubject错误行为.
  • flatMap会在pause / resume取消内部订阅的错误.
  • 更新以使当前的" pedantic"分析器满意.

0.22.0 #

此版本包括针对背压运算符的重构:

  • 重大变化: debounce现在分为debouncedebounceTime .
  • 重大更改: sample现在被分成samplesampleTime .
  • 突破性的变化: throttle现在分为throttlethrottleTime .

0.21.0 #

  • 重大更改: BehaviorSubject现在具有一个单独的工厂构造函数seeded()这使您可以为该Subject注入null值.
  • 重大更改:如果最后一个事件也是Error ,那么BehaviorSubject现在将发出Error . 之前,如果在listen之前发生Error ,则不会通知订户该Error . 要重构,只需将所有出现的BehaviorSubject(seedValue: value)更改为BehaviorSubject.seeded(value)
  • 添加了groupBy运算符
  • Bugix: doOnCancel :如果是Future ,现在将等待取消结果.
  • 删除: bufferWithCountwindowWithCounttween请使用bufferCountwindowCounttween被删除,因为它从来都不是一个正式的Rx规范.
  • 更新了Flutter示例,以与最新的Flutter稳定器一起使用.

0.20.0 #

  • startBufferEvery变化:使用startBufferEvery时,bufferCount的行为有错误(以前已skip )如果以前依靠bufferCount且skip大于1,则可能已注意到错误的行为.
  • 突破性变化: repeat不再是仅将n上次发出的事件重复n次的运算符,而是一种具有StreamFactory和count参数的Observable工厂方法. 这将导致每个重复周期创建一个新的Observable序列.
  • mapTo是一个新的运算符,其作用与map一样,但是它不采用mapper函数,而是采用单个值来映射每个事件.
  • 错误修正:switchIfEmpty现在可以正确调用onDone
  • 现在,CombineLatest和zip可以接受任意数量的流:
    • CombineLatest2-9和zip2-9功能保持不变,但现在使用了新的构造路径.
    • 添加CombineLatest和zipLatest,使您可以通过Iterable <Stream
    • 添加combineLatestList / zipList,它允许您接收Iterable <Stream
    • 构造函数由Stream实现直接提供
  • 错误修正:转换后的主题现在将正确返回一个新的Observable,其中isBroadcast为true(之前为false)
  • 删除早已被替换的不推荐使用的运算符: bufferWithCountwindowWithCountambflatMapLatest

0.19.0 #

  • 重大更改:主题onCancel函数现在返回void而不是Future以正确遵守StreamController签名.
  • 错误修正:FlatMap操作员在所有情况下均正确调用onDone
  • 可观察的可连接对象:可观察的对象,可以多次监听,并且在调用connect方法之前不会开始发出值
  • ValueObservable:一个新接口,使您可以获取Observable发出的最新值.
    • 由BehaviorSubject实现
    • 通过publishValueshareValue将常规可观察值转换为shareValue
  • ReplayObservable:一个新接口,使您可以获取Observable发出的值.
    • 由ReplaySubject实现
    • 通过publishReplayshareReplay将普通的可观察对象转换为shareReplay

0.18.1 #

  • 添加retryWhen运算符. 感谢Razvan Lung(@ long1eu)! 这可以用于自定义重试逻辑.

0.18.0 #

  • 重大更改:删除retype方法,在Dart 2中已弃用.
  • Add flatMapIterable

0.17.0 #

  • 重大更改:Observable的stream属性现在是私有的.
    • 避免API混淆
    • 简化主题实施
    • 要求覆盖stream属性的人员改用super构造函数
  • amb / racecombineLatestconcatconcat_eagermergezip添加正确的onPause和onResume处理
  • Add switchLatest operator
  • 将错误和堆栈跟踪添加到RetryError类
  • 添加onErrorResumeonErrorRetryWith运算符. 这些使人们可以根据发生的错误返回特定的流或值.

0.16.7 #

  • 修复Flutter + Dart 2的新缓冲区和窗口实现
  • 主体现在实现了Observable接口

0.16.6 #

  • 返工bufferwindow ,允许使用采样器进行计划
  • added buffer
  • added bufferFuture
  • added bufferTest
  • added bufferTime
  • added bufferWhen
  • added window
  • added windowFuture
  • added windowTest
  • added windowTime
  • added windowWhen
  • bufferwindow添加了onCount采样器
  • bufferwindow添加了onFuture采样器
  • bufferwindow添加了onTest采样器
  • bufferwindow添加了onTime采样器
  • bufferwindow添加了onStream采样器

0.16.5 #

  • Renames amb to race
  • Renames flatMapLatest to switchMap
  • Renames bufferWithCount to bufferCount
  • Renames windowWithCount to windowCount

0.16.4 #

  • Adds bufferTime transformer.
  • Adds windowTime transformer.

0.16.3 #

  • Adds delay transformer.

0.16.2 #

  • 将添加的事件修复为接收sink ,不能正确处理Subjects .

0.16.1 #

  • 修复Dart 2的dematerialize方法.

0.16.0+2 #

  • BehaviorSubject添加value . 允许您获取主题发出的最新值(如果存在).
  • values添加到ReplayrSubject . 允许您获取主题存储的值(如果存在).

0.16.0+1 #

  • 更新变更日志

0.16.0 #

  • 打破了向后兼容性 ,此发行版仅适用于> = 2.0.0的Dart SDK.
  • 删除了旧的cast以支持现在的本地Stream强制转换方法.
  • 重写retype以返回Observable .

0.15.1 #

  • exhaustMap映射添加到内部可观察对象,忽略其他值,直到该可观察对象完成.
  • 改进的代码与dartdevc兼容.
  • 在pubspec中添加SDK版本上限

0.15.0 #

  • 更改debounce ,以在源流完成后发出源流的最后一项.
  • 取消debounce ,请确保它不会一直打开任何其他异步计时器.

0.14.0+1 #

  • 更改DoStreamTransformer以在取消时返回Future以获得api兼容性.

0.14.0 #

  • 添加PublishSubject (感谢@pauldemarco)
  • 修复doOnX运算符的错误, doOnX错误经常触发回调

0.13.1 #

  • 修复FlatMapLatest中在某些情况下未正确取消的错误
  • 删除Stream处理程序上的其他异步方法,除非显示它们可以解决问题

0.13.0 #

  • 完全删除call运营商/ StreamTransformer
  • 重要的错误修复:现在,任何Stream或Operator中引发的错误都将被正确发送到StreamSubscription .
  • 改善整个库中错误的整体处理,以确保正确处理它们

0.12.0 #

  • 添加了doOn *运算符来代替call .
  • 添加了DoStreamTransformer来代替CallStreamTransformer
  • 不推荐使用的callCallStreamTransformer . 请使用适当的doOnX运算符/转换器.
  • Added distinctUnique. Emits items if they've never been emitted before. Same as to Rx#distinct.

0.11.0 #

  • !!!!!!!!
    • 为了与Dart 1.24.0中包含该方法的Stream类的下一版本兼容,已删除Observable.groupBy.

0.10.2 #

  • BugFix:与ng2异步管道一起使用时,新的Subject实现不再导致无限循环.

0.10.1 #

  • 文档修复

0.10.0 #

  • api更改
    • 可观察的
      • 删除所有不推荐使用的方法,包括:
        • observable工厂-由构造函数new Observable()取代
        • combineLatest被强模式版本combineLatest2取代combineLatest9
        • zip -由强模式版本替换zip2 - zip9
      • 支持将来返回方法的可asObservable转换. 例如, new Observable.fromIterable([1, 2]).first.asObservable()
      • 现在,"最大值"和"最小值"将返回"最大值或最小值"的"将来"值,而不是一堆递增或递减的值.
      • 添加cast
      • 删除ConcatMapStreamTransformer - ConcatMapStreamTransformer已支持该asyncExpand . 保留concatMap方法为别名.
    • 科目
      • BehaviourSubject已重命名为BehaviorSubject
      • 主题已被重写,包括更多测试
      • 与主题的接收概念保持一致,它们仅是广播的
  • 文档-大量的文档已添加到库中,其中包含有关每种Future,Stream和Transformer的解释和示例.
    • 文档详细介绍了RxDart与原始Observables之间的区别.

0.9.0 #

  • api更改:
    • 将所有StreamTransformer工厂转换为适当的类
      • 确保可以重复使用这些类
    • 重试已从运算符转移到构造函数. 这是为了确保每次都能以正确的方式正确重建流.
    • 现在,Streams可以正确执行单订合同
  • 包括示例Flutter应用. 要运行它,请按照自述文件中的说明进行操作.

0.8.3+1 #

  • 重命名示例映射到示例

0.8.3 #

  • 添加了concatWith,zipWith,mergeWith,skipUntil
  • 清理示例文件夹
  • 清理示例代码
  • 添加了斐波那契示例
  • 添加了搜索GitHub示例

0.8.2+1 #

  • 将仓库移至ReactiveX
  • 相应地更新自述文件徽章

0.8.2 #

  • 添加实现/去实现
  • 附加范围(工厂)
  • 添加计时器(工厂)
  • 增加时间戳
  • 添加了concatMap

0.8.1 #

  • 添加了Never构造函数
  • 添加了错误构造函数
  • 将代码覆盖范围移至codecov.io

0.8.0 #

  • BREAKING:点击被呼叫取代(onData)
  • 添加的调用,它可以采用以下事件方法的任意组合:onCancel,onData,onDone,onError,onListen,onPause,onResume

0.7.1+1 #

  • 改进了自述文件

0.7.1 #

  • 添加了ignoreElements
  • 添加了onErrorResumeNext
  • 添加了onErrorReturn
  • 添加了switchIfEmpty
  • 添加了空工厂构造函数

0.7.0 #

  • BREAKING:将CombineXXXLatest和zipXXX重命名为带编号的等效项,例如:CombineThreeLatest变为CombineLatest3
  • 内部重构,将流/流转换器公开为单独的库

0.6.3+4 #

  • 更改ofType以使用TypeToken

0.6.3+3 #

  • 添加的类型

0.6.3+2 #

  • 添加了defaultIfEmpty

0.6.3+1 #

  • 更改了concat,旧的concat现在是concatEager,新的concat的行为符合预期

0.6.3 #

  • 用最新的添加
  • 添加了defer ctr(这都要感谢brianegan

0.6.2 #

  • 刚刚添加(感谢brianegan
  • 添加了groupBy
  • 加上

0.6.1 #

  • 添加了concat

0.6.0 #

  • BREAKING:startWith现在仅接受一个参数,而不是Iterable. 要添加多个开始事件,请使用startWithMany.
  • 添加了BehaviourSubject和ReplaySubject. 这些实现StreamController.
  • BehaviourSubject将在侦听时通知最后添加的事件.
  • ReplaySubject将在收听时通知所有过去的事件.
  • 不推荐使用:zip和CombineLatest,改为使用它们的强类型友好替代方法(可作为Observable类上的静态方法使用,即Observable.combineThreeLatest,Observable.zipFour等).

0.5.1 #

  • 添加了文档(多亏了ustinlessard-wf
  • 修复由于ExpectAsync的弃用而导致的测试中断
  • 修复测试以满足强大的模式要求

0.5.0 #

  • 从此版本开始,rxdart依赖于SDK v1.21.0,以支持新添加的通用方法类型语法

example/example.dart

import 'package:rxdart/rxdart.dart';

/// generate n-amount of fibonacci numbers
///
/// for example: dart fibonacci.dart 10
/// outputs:
/// 1: 1
/// 2: 1
/// 3: 2
/// 4: 3
/// 5: 5
/// 6: 8
/// 7: 13
/// 8: 21
/// 9: 34
/// 10: 55
/// done!
void main(List<String> arguments) {
  // read the command line argument, if none provided, default to 10
  var n = (arguments.length == 1) ? int.parse(arguments.first) : 10;

  // seed value: this value will be used as the
  // starting value for the [scan] method
  const seed = IndexedPair(1, 1, 0);

  Observable
          // amount of numbers to compute
          .range(1, n)
      // accumulator: computes a new accumulated
      // value each time a [Stream] event occurs
      // in this case, the accumulated value is always
      // the latest Fibonacci number
      .scan((IndexedPair seq, _, __) => IndexedPair.next(seq), seed)
      // finally, print the output
      .listen(print, onDone: () => print('done!'));
}

class IndexedPair {
  final int n1, n2, index;

  const IndexedPair(this.n1, this.n2, this.index);

  factory IndexedPair.next(IndexedPair prev) => IndexedPair(
      prev.n2, prev.index <= 1 ? prev.n1 : prev.n1 + prev.n2, prev.index + 1);

  @override
  String toString() => '$index: $n2';
}

Use this package as a library

1. Depend on it

将此添加到包的pubspec.yaml文件中:


dependencies:
  rxdart: ^0.22.6

2. Install it

您可以从命令行安装软件包:

与酒吧:


$ pub get

使用Flutter:


$ flutter pub get

另外,您的编辑器可能支持pub getflutter pub get . 查看您的编辑器文档以了解更多信息.

3. Import it

现在,在Dart代码中,您可以使用:


import 'package:rxdart/rxdart.dart';
  
Popularity:
描述该程序包相对于其他程序包的受欢迎程度. [更多]
100
Health:
从静态分析得出的代码运行状况. [更多]
100
Maintenance:
反映出软件包的整洁和最新状态. [更多]
100
Overall:
以上的加权分数. [更多]
100
了解有关得分的更多信息.

我们在2019年12月10日分析了此软件包,并在下面提供了分数,详细信息和建议. using: 分析已完成,状态使用以下命令 :

  • 飞镖:2.7.0
  • 最高:0.13.1 + 4

Dependencies

Package Constraint Resolved Available
直接依赖
Dart SDK > = 2.0.0-dev <3.0.0
开发依赖
build_runner ^0.9.0
build_web_compilers ^0.4.0
coverage ^0.13.0
mockito ^3.0.0
pedantic ^1.5.0
stack_trace ^1.9.2
test ^1.0.0

by  ICOPY.SITE