Блок: можно ли 2 раза выдать одно и то же состояние? - PullRequest
0 голосов
/ 02 июля 2019

В представлении входа в систему, если пользователь нажимает на кнопку входа в систему, не вставив свои учетные данные, LoginFailState является yield, и представление реагирует на него. Если он снова нажимает, это LoginFailstate снова возвращается, но представление не реагирует на это. Итак, есть ли способ выдавать больше раз одно и то же состояние?

Есть некоторый код, чтобы лучше объяснить мою ситуацию:

class LoginBloc extends Bloc<LoginEvent, LoginState> {
  @override
  LoginState get initialState => LoginUninitialized();

  @override
  Stream<LoginState> mapEventToState(LoginEvent event) {
    if (event is loginButtonPressed) {
      yield LoginFailState();
    }
  }

Вид:

 @override
  Widget build(BuildContext context) {
    return BlocBuilder(
      bloc: _loginBloc,
      builder: (BuildContext context, LoginState state) {
    if (state is LoginFail) {
        print ('Login fail');
    }
    return Column(
          ...
    )

1 Ответ

0 голосов
/ 02 июля 2019

Используйте BlocListener , чтобы реагировать на изменения состояния.

    BlocListener(
      bloc: _loginBloc,
      listener: (BuildContext context, LoginState state) {
        if (state is LoginFail) {
          print('Login failed');
          // Or show a Snackbar
        }
      },
      child: BlocBuilder(
        bloc: _loginBloc,
        builder: (BuildContext context, LoginState state){
          // Your display code here
          return Container();
        },
      ),
    )
...