Observable устарел в rxdart 0.23.1

Я только что обновился до rxdart 0.23.1 и внезапно получаю ошибки везде, где я использовал класс Observable. Я прочитал о критических изменениях в документации, и он указал на использование пакета rxdart_codemod, который я интегрировал в свой pubspec.yaml файл, и выполнение следующей команды pub global activate rxdart_codemod вызывает ошибку -bash: pub: command not found. Я установил flutter правильно, и flutter doctor, похоже, тоже работает нормально. Есть ли какой-то другой класс, который заменил Observable, ничего не нашел об этом в документах. Конечно, я могу заменить Observable на Stream из языка Dart, но мне действительно интересно узнать, какой путь принимает пакет rxdart, поскольку он указывает, что он использует преимущества dart extension. Использование таких методов, как combineLatest2, невозможно с Dart's Stream, поэтому он не будет быть хорошим выбором для замены?


person Pritish    schedule 14.12.2019    source источник


Ответы (7)


Observable можно заменить на Stream, как я упоминал в вопросе, но если вы используете такие методы, как combineLatest2 из Observable, просто замените Observable абстрактным классом Rx, чтобы вы могли использовать Rx.combineLatest2

person Pritish    schedule 15.12.2019

Rxdart больше не нуждается в настраиваемом классе для работы.

Теперь он полагается на методы расширения, которые являются недавней функцией Dart (Dart 2.6) для реализации всех функций Observable непосредственно на Stream.

Можете смело заменять все свои Observable на Stream.

person Rémi Rousselet    schedule 14.12.2019
comment
Тогда как мне использовать такие методы, как combLatest2 с Stream, это будет невозможно - person Pritish; 14.12.2019

Используйте Rx.combineLatest2 вместо Observable.combineLatest2

Наблюдаемые больше не работают!

person goodBot    schedule 05.03.2020

Вы можете использовать

flutter pub global activate rxdart_codemod 

вместо pub global activate rxdart_codemod.

Другой вариант - заменить ваш Observable на Stream.

person Kartik Shandilya    schedule 14.12.2019

Протокол изменений документа rxdart 0.23.0:

ValueObservable -> ValueStream
ReplayObservable -> ReplayStream
ConnectableObservable -> ConnectableStream
ValueConnectableObservable -> ValueConnectableStream
ReplayConnectableObservable -> ReplayConnectableStream
person ifredom    schedule 09.07.2020

Rxdart теперь реализует его в RX .combineLatest2

person Franco Macri    schedule 18.04.2020

В rxdart 0.26.0 я использую CombineLatestStream‹ T, R ›класс с comb2‹ A, B, R ›метод:

import 'dart:async';
import 'validators.dart';
import 'package:rxdart/rxdart.dart';

class Bloc extends Validators {
  final _email = StreamController<String>.broadcast();
  final _password = StreamController<String>.broadcast();

  Stream<String> get email => _email.stream.transform(validateEmail);
  Stream<String> get password => _password.stream.transform(validatePassword);
  Stream<bool> get submitValid => CombineLatestStream.combine2(email, password, (email, password) => true);

  Function(String) get changeEmail => _email.sink.add;
  Function(String) get changePassword => _password.sink.add;

  dispose() {
    _email.close();
    _password.close();
  }
}
person JDKot    schedule 27.03.2021