Я только что обновился до 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
, поэтому он не будет быть хорошим выбором для замены?
Observable устарел в rxdart 0.23.1
Ответы (7)
Observable
можно заменить на Stream
, как я упоминал в вопросе, но если вы используете такие методы, как combineLatest2
из Observable
, просто замените Observable
абстрактным классом Rx
, чтобы вы могли использовать Rx.combineLatest2
Rxdart больше не нуждается в настраиваемом классе для работы.
Теперь он полагается на методы расширения, которые являются недавней функцией Dart (Dart 2.6) для реализации всех функций Observable
непосредственно на Stream
.
Можете смело заменять все свои Observable
на Stream
.
Используйте Rx.combineLatest2
вместо Observable.combineLatest2
Наблюдаемые больше не работают!
Вы можете использовать
flutter pub global activate rxdart_codemod
вместо pub global activate rxdart_codemod
.
Другой вариант - заменить ваш Observable
на Stream
.
Протокол изменений документа rxdart 0.23.0:
ValueObservable -> ValueStream
ReplayObservable -> ReplayStream
ConnectableObservable -> ConnectableStream
ValueConnectableObservable -> ValueConnectableStream
ReplayConnectableObservable -> ReplayConnectableStream
Rxdart теперь реализует его в RX .combineLatest2
В 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();
}
}