lestathc / rxdart

The Reactive Extensions for Dart

Home Page:http://reactivex.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RxDart

Build Status codecov Pub Gitter

About

RxDart is a reactive functional programming library for Google Dart, based on ReactiveX.
Google Dart comes with a very decent Streams API out-of-the-box; rather than attempting to provide an alternative to this API, RxDart adds functionality on top of it.

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 = new Observable<KeyboardEvent>(document.onKeyUp);

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

API Overview

RxDart's Observables extend the Stream class. This has two major implications:

Instantiation

Generally speaking, creating a new Observable is either done by wrapping a Dart Stream using the top-level constructor new Observable(), or by calling a factory method on the Observable class. But to better support Dart's strong mode, combineLatest and zip have been pulled apart into fixed-length constructors. These methods are supplied as static methods, since Dart's factory methods don't support generic types.

Usage
var myObservable = new Observable(myStream);
Available Factory Methods
  • amb
  • concat
  • defer
  • error
  • just
  • merge
  • never
  • periodic
  • timer
Usage
var myObservable = new Observable.merge([myFirstStream, mySecondStream]);
Available Static Methods
  • combineLatest (combineLatest2, combineLatest3, combineLatest4, ..., combineLatest9)
  • range
  • tween
  • zip (zip2, zip3, zip4, ..., zip9)
Usage
var myObservable = Observable.combineLatest3(
    myFirstStream, 
    mySecondStream, 
    myThirdStream, 
    (firstData, secondData, thirdData) => print("$firstData $secondData $thirdData"));

Transformations

Available Methods
  • bufferWithCount
  • call
  • concatMap
  • concatWith
  • debounce
  • dematerialize
  • flatMapLatest
  • flatMap
  • groupBy
  • interval
  • materialize
  • mergeWith
  • max
  • min
  • pluck
  • repeat
  • retry
  • sample
  • scan
  • skipUntil
  • startWith
  • startWithMany
  • takeUntil
  • timeInterval
  • timestamp
  • throttle
  • windowWithCount
  • withLatestFrom
  • zipWith
Usage
var myObservable = new Observable(myStream)
    .bufferWithCount(5)
    .distinct();

Objects

  • Observable
  • BehaviourSubject
  • ReplaySubject

Examples

Web and command-line examples can be found in the example folder.

Web Examples

In order to run the web examples, please follow these steps:

  1. Clone this repo and enter the directory
  2. Run pub get
  3. Run pub serve example/web
  4. Navigate to http://localhost:8080 in your browser

Command Line Examples

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

  1. Clone this repo and enter the directory
  2. Run pub get
  3. Run dart example/bin/fibonacci.dart 10

Flutter Example

Install Flutter

In order to run this repo, you must have Flutter installed. For help getting started with Flutter, view the online documentation.

Run the app

  1. Open up an Android Emulator, the iOS Simulator, or connect an appropriate mobile device for debugging.
  2. Open up a terminal
  3. cd into the example/flutter/github_search directory
  4. Run flutter doctor to ensure you have all Flutter dependencies working.
  5. Run flutter packages get
  6. Run flutter run

Notable References

Changelog

Refer to the Changelog to get all release notes.

About

The Reactive Extensions for Dart

http://reactivex.io

License:Other


Languages

Language:Dart 92.0%Language:HTML 4.0%Language:Shell 3.1%Language:Objective-C 0.8%Language:Java 0.1%Language:Ruby 0.1%