#flutter #firebase-authentication
# #flutter #firebase-аутентификация
Вопрос:
Я не могу понять, почему этот широковещательный поток не работает.
Я отправляю данные из _auth.onAuthStateChanged на новый StreamController, чтобы я мог больше контролировать поток.
Приведенный ниже код работает нормально, но как только я раскомментирую строку _userStream.listen(_handleUserStream);
, поток перестает работать, хотя пользовательский поток является широковещательным потоком.
Я попытался инициализировать StreamController как StreamController.broadcast() , но тогда он вообще не работает даже с одним слушателем.
class AuthService() {
final FirebaseAuth _auth = FirebaseAuth.instance;
StreamController<FirebaseUser> _userStreamController;
Stream<User> _userStream;
Stream<User> get userStream => _userStream;
AuthService() {
initStream();
}
initStream() async {
_userStreamController = StreamController<FirebaseUser>();
_userStream = _userStreamController.stream
.asBroadcastStream()
.asyncMap(_userFromFirebaseUser);
_auth.onAuthStateChanged.listen((event) {
_userStreamController.add(event);
});
// _userStream.listen(_handleUserStream);
}
... other methods
}
Ответ №1:
Вы можете инициализировать StreamController в первой строке initStream напрямую как широковещательный поток, а затем вы можете использовать поток напрямую, как показано ниже
class AuthService() {
final FirebaseAuth _auth = FirebaseAuth.instance;
StreamController<FirebaseUser> _userStreamController;
Stream<User> _userStream;
Stream<User> get userStream => _userStream;
AuthService() {
initStream();
}
initStream() async {
_userStreamController = StreamController.broadcast();
_userStream = _userStreamController.stream;
_userStream.listen(_handleUserStream);
_auth.onAuthStateChanged.listen((event) {
_userStreamController.add(event);
});
}
... other methods
}
Комментарии:
1. Как я уже сказал, я пытался инициализировать как a
StreamController.broadcast()
, но безуспешно. Вы пробовали это, и это сработало?2. Можете ли вы поместить точку останова или оператор печати внутри прослушивателя onAuthStateChanged, чтобы подтвердить, что события действительно поступают