Блокировка дротиков - PullRequest
       3

Блокировка дротиков

0 голосов
/ 23 октября 2018

Я использую шаблон BLoC для приложения Futter, но не могу заставить обоих слушателей работать.Если я позвоню loggedIn.listen() до register.listen(), register.listen() больше не будет работать, и наоборот.

AuthBloc({this.authService}) {
    Stream<CrendentialsDetail> detailStream = Observable.combineLatest2(
      emailStream,
      passwordStream,
      (email, password) {
        return CrendentialsDetail(email: email, password: password);
      },
    );

    Stream<AuthResponse> loggedIn ... code ...

    Stream<RegisterResponse> register ... code ...

    register.listen((RegisterResponse res) {
      Scaffold.of(_context).showSnackBar(
        new SnackBar(
          content: new Text(res.message),
        ),
      );
    }, onError: (error) {
      Scaffold.of(_context).showSnackBar(
        new SnackBar(
          content: new Text(error.message),
        ),
      );
    });

    loggedIn.listen((AuthResponse user) {
      currentUserSubject.add(user);
      _goToHome();
    }, onError: (error) {
      Scaffold.of(_context).showSnackBar(
        new SnackBar(
          content: new Text(error.message),
        ),
      );
    });
  }

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 30 октября 2018

Это решение, которое я использую сейчас.Может ли кто-нибудь объяснить мне, почему работает, а мой вопрос нет?

AuthBloc({this.authService}) {
    Observable(loginSubject.stream).withLatestFrom(
        Observable.combineLatest2(
          emailStream,
          passwordStream,
          (email, password) {
            return CrendentialsDetail(email: email, password: password);
          },
        ), (_, d) {
      return d;
    }).flatMap((d) {
      return Observable.fromFuture(authService.loginUser(d)).doOnListen(() {
        loadingSubject.add(true);
      }).doOnDone(() {
        loadingSubject.add(false);
      });
    }).listen((AuthResponse user) {
      currentUserSubject.add(user);
      _goToHome();
    }, onError: (error) {
      Scaffold.of(_context).showSnackBar(
        new SnackBar(
          content: new Text(error.message),
        ),
      );
    });

    Observable(signUpSubject.stream).withLatestFrom(
        Observable.combineLatest2(
          emailStream,
          passwordStream,
          (email, password) {
            return CrendentialsDetail(email: email, password: password);
          },
        ), (_, d) {
      return d;
    }).flatMap((d) {
      return Observable.fromFuture(authService.register(d)).doOnListen(() {
        loadingSubject.add(true);
      }).doOnDone(() {
        loadingSubject.add(false);
      });
    }).listen((RegisterResponse res) {
      Scaffold.of(_context).showSnackBar(
        new SnackBar(
          content: new Text(res.message),
        ),
      );
    }, onError: (error) {
      Scaffold.of(_context).showSnackBar(
        new SnackBar(
          content: new Text(error.message),
        ),
      );
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...