Что такое RxDart?

«Что такое RxDart?» — вопрос из категории Реактивное программирование, который задают на 44% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

RxDart — это библиотека для Dart, которая добавляет функциональность реактивного программирования, расширяя встроенные в Dart Stream и StreamController. Она предоставляет дополнительные операторы и специальные типы потоков (Subjects), упрощая обработку асинхронных событий и данных.

Ключевые компоненты:

  1. Расширенные операторы: Позволяют комбинировать, трансформировать и управлять потоками данных.

    import 'package:rxdart/rxdart.dart';
    
    final stream = Stream.fromIterable([1, 2, 3, 4, 5]);
    stream
        .where((value) => value.isOdd) // Оставляем нечетные
        .debounceTime(const Duration(milliseconds: 500)) // Игнорируем частые события
        .listen(print); // Вывод: 1, 3, 5 (с задержкой)
  2. Subjects: Особые типы StreamController, которые сами являются потоком и позволяют "вбрасывать" события в поток.

    • PublishSubject — отправляет все новые события подписчикам, но не хранит последнее значение.
    • BehaviorSubject — хранит и сразу отправляет новым подписчикам последнее добавленное значение.
    • ReplaySubject — хранит и отправляет новым подписчикам заданное количество предыдущих событий.
    final subject = BehaviorSubject<int>();
    subject.add(1);
    subject.stream.listen(print); // Сразу получит: 1
    subject.add(2); // Получит: 2

Применение в Flutter: RxDart часто используется в связке с паттернами управления состоянием, такими как BLoC, для создания реактивных бизнес-логик, где события (например, пользовательский ввод) преобразуются в состояния UI.