gpt4 book ai didi

flutter - 如何避免 Observable 多次调用 RxDart

转载 作者:行者123 更新时间:2023-12-03 04:00:14 24 4
gpt4 key购买 nike

我已经在我的登录屏幕上实现了 BLOC 模式。

下面的代码是按钮单击事件,当我第一次单击带有错误凭据的登录按钮时,它会显示一次 snackbar ,如果我再次单击该按钮,它会显示两次,如果我再次单击它会显示三次等等。 .

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();

最佳答案

问题是您每次调用 listen 时都在注册一个监听器(通过调用 _validateInputs ) .您应该在 initState 中听一次或尝试 first 来自 Observable 的属性(property)它返回一个 future 。

关于flutter - 如何避免 Observable 多次调用 RxDart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57816636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com