Я внедрил шаблон BLOC на свой экран входа в систему.
Приведенный ниже код является событием нажатия кнопки, здесь происходит то, что происходит, когда я нажимаю кнопку входа с неправильными учетными данными в первый раз, когда она показывает снэк-бар один раз, если я снова нажимаю кнопку, она отображается два раза, если я снова нажимаю ее, отображается три раза и так далее .. .
Future _validateInputs() async {
final form = _loginKey.currentState;
if (form.validate()) {
print(_userIDController.text + _passwordController.text);
bloc.validateLogin(_userIDController.text, _passwordController.text);
bloc.loginDetails.listen((loginDetails){
if(loginDetails != null) {
if(loginDetails.loginStatus) {
// Navigate to Home
print("Login Sucess");
} else {
print(loginDetails.failureMessage);
scaffoldKey.currentState.showSnackBar(SnackBar(
content: Text('Invalid Username or Password'),
));
//bloc.clear();
}
}
});
}
}
}
Это мой код BLOC, я не знаю, где я ошибаюсь.
class LoginBloc {
final _repository = Repository();
var _doLogin = PublishSubject<LoginModel>();
Observable<LoginModel> get loginDetails => _doLogin.stream;
validateLogin(String userName,String password) async {
LoginModel itemModel = await _repository.doLogin(userName,password);
_doLogin.sink.add(itemModel);
}
dispose() {
_doLogin.close();
}
}
final bloc = LoginBloc();