【发布时间】:2021-04-15 21:07:51
【问题描述】:
我只是使用流控制器将 Firebase 身份验证用户状态流转换为另一个流。
final FirebaseAuth auth = FirebaseAuth.instance;
StreamController<Oyuncu?> streamController = StreamController<Oyuncu?>();
late final StreamSubscription _streamSubscription;
FirebaseAuthService() {
_streamSubscription = auth.authStateChanges().listen((User? user) {
if (user != null) {
streamController.add(Oyuncu(
ID: user.uid,
name: user.displayName ?? "Random User Name",
profilePicture: user.photoURL));
} else {
streamController.add(null);
}
});
}
Listen 是一个 Stream Subscription,我们需要取消它以避免内存泄漏。但是我不能覆盖 dispose 方法。如何正确执行取消?
class FirebaseAuthService extends AuthBase {
final FirebaseAuth auth = FirebaseAuth.instance;
StreamController<Oyuncu?> streamController = StreamController<Oyuncu?>();
late final StreamSubscription _streamSubscription;
FirebaseAuthService() {
_streamSubscription = auth.authStateChanges().listen((User? user) {
if (user != null) {
streamController.add(Oyuncu(
ID: user.uid,
name: user.displayName ?? "Random User Name",
profilePicture: user.photoURL));
} else {
streamController.add(null);
}
});
}
@override
anonLogin() async {
auth.signInAnonymously();
}
@override
Stream<Oyuncu?> userStatus() async* {
yield* streamController.stream;
}
}
谢谢
【问题讨论】:
标签: dart controller stream