тип 'BehaviorSubject <dynamic>' не является подтипом типа 'Stream <String>' для 'stream' - PullRequest
0 голосов
/ 21 марта 2020

У меня странная ошибка, которую я получаю, и я не могу исправить это. Я реализую шаблон blo c на своей странице входа. Я не могу указать, что я делаю неправильно. Вот мой код

login_blo c .dart

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

class LoginBloc extends Object with Validators {
  final _emailController = BehaviorSubject<dynamic>();
  final _passwordController = BehaviorSubject<dynamic>();

  Function(String) get emailChanged => _emailController.sink.add;
  Function(String) get passwordChanged => _passwordController.sink.add;

  Stream<String> get emailValidator => _emailController.stream.transform(emailValidators);
  Stream<String> get passwordValidator =>  _passwordController.stream.transform(passwordValidators);

  Stream<bool> get submitCheck => Rx.combineLatest2(emailValidator, passwordValidator, (e, p) => true);

  dispose() {
   _emailController?.close();
   _passwordController?.close();
 }
}

mixin Validators {
  var emailValidators =
  StreamTransformer<String, String>.fromHandlers(handleData: (email, sink) {
   if (email.contains("@")) {
     sink.add(email);
   } else {
     sink.addError("Email is not valid");
   }
});

  var passwordValidators = StreamTransformer<String, String>.fromHandlers(
     handleData: (password, sink) {
    if (password.length > 0) {
      sink.add(password);
    } else {
      sink.addError("Password Field should not be empty");
    }
 });
}

final loginBloc = LoginBloc();

вот виджет, который я создал, вызывая blo c

  Widget _emailPasswordWidget() {
return Column(
  children: <Widget>[
    Container(
  margin: EdgeInsets.symmetric(vertical: 10),
  child: Column(
    crossAxisAlignment: CrossAxisAlignment.start,
    children: <Widget>[
      Text(
        'Email ID',
        style: TextStyle(fontWeight: FontWeight.bold, fontSize: 15),
      ),
      SizedBox(
        height: 10,
      ),
      StreamBuilder<String>(
        stream: loginBloc.emailValidator,
        builder: (context, snapshot) {
          return TextField(
              onChanged: loginBloc.emailChanged,
              obscureText: false,
              decoration: InputDecoration(
                  errorText: snapshot.error,
                  border: InputBorder.none,
                  fillColor: Color(0xfff3f3f4),
                  filled: true));
        }
      )
    ],
  ),
)
   loginBloc.passwordChanged),
  ],
);
}

Буду признателен любому помочь вообще. Я проверил онлайн, и я не видел никакой помощи. Я использую версию rxdart ^ 0.23.1. Я использовал streamcontroller вместо темы поведения, и я тоже использовал тему публикации, и я все еще получаю сообщение об ошибке.

...