Я пишу приложение для флаттера с архитектурой Bloc с помощью go API, и у меня возникает проблема, которая возникает, когда я нажимаю кнопку входа в систему после получения результата, если имя пользователя и пароль действительны.Я верну сообщение «ошибка, имя пользователя и пароль не действительны», если произошла ошибка.
извините за мой плохой английский.
//my bloc.dart login
class Bloc extends Validators {
final _email = BehaviorSubject<String>();
final _password = BehaviorSubject<String>();
//add to the stram
Stream<String> get email => _email.stream.transform(validateEmail);
Stream<String> get password => _password.stream.transform(validatePassword);
Stream<bool> get submitValid =>
Observable.combineLatest2(email, password, (e, p) => true);
//change Data
Function(String) get changeEmail => _email.sink.add;
Function(String) get changePassword => _password.sink.add;
submit() {
print('your email is :' + _email.value);
print('your password is :' + _password.value);
// result = http request
// show the error to the user if there are
}
dispose() {
_email.close();
_password.close();
}
}
// my validator.dart
class Validators {
final validateEmail = StreamTransformer<String, String>.fromHandlers(
handleData: (String email, EventSink<String> sink) {
if (email.contains('@')) {
sink.add(email);
} else {
sink.addError('Enter a valid email');
}
}
);
final validatePassword = StreamTransformer<String, String>.fromHandlers(
handleData: (String password, EventSink<String> sink) {
if (password.length > 3) {
sink.add(password);
} else {
sink.addError('Enter must be at least 4 characters');
}
}
);
}
// отправить виджет флаттера
Widget submitButton(Bloc bloc) => StreamBuilder<bool>(
stream: bloc.submitValid,
builder: (context, snap) {
return Column(
children: <Widget>[
RaisedButton(
onPressed: (!snap.hasData) ? null : bloc.submit,
child: Text(
'Login',
style: TextStyle(color: Colors.white),
),
color: Colors.blue,
),
Text((!snap.hasError) ? "" : "The result of the api" )
],
);
},
);