我可以在 Dart 中关闭流后重新打开流吗
can I reopen stream after closing it in Dart
在我的 Flutter 应用中,我使用 BehaviorSubject()
来收听电子邮件文本字段。
当用户成功登录时,我调用了 dispose 函数来关闭它以避免内存泄漏。
如果用户注销并尝试再次登录,我可以重新打开流吗?
final _emailStream = BehaviorSubject<String>.seeded("");
final validateEmail = StreamTransformer<String, String>.fromHandlers(handleData: (email, sink) {
var isEmailValid = RegExp(
r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+")
.hasMatch(email);
isEmailValid ? sink.add(email) : sink.addError("Enter a valid Email");
});
Stream<String> get email => _emailStream.stream.transform(validateEmail);
void updateEmail(String email) => _emailStream.sink.add(email);
void dispose() {
_emailStream.close();
}
我敢肯定你不能 re-open 直播。
但是,在我当前的项目中,我在构建登录时打开流 class。因此,当我登录时,我处理我的流,当我注销时,包含我的流的 bloc 是重建的,新流是 re-created.
可能不是最好的方法,但对我有用!
Log out
Building formbloc containing my streams
在我的 Flutter 应用中,我使用 BehaviorSubject()
来收听电子邮件文本字段。
当用户成功登录时,我调用了 dispose 函数来关闭它以避免内存泄漏。
如果用户注销并尝试再次登录,我可以重新打开流吗?
final _emailStream = BehaviorSubject<String>.seeded("");
final validateEmail = StreamTransformer<String, String>.fromHandlers(handleData: (email, sink) {
var isEmailValid = RegExp(
r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+")
.hasMatch(email);
isEmailValid ? sink.add(email) : sink.addError("Enter a valid Email");
});
Stream<String> get email => _emailStream.stream.transform(validateEmail);
void updateEmail(String email) => _emailStream.sink.add(email);
void dispose() {
_emailStream.close();
}
我敢肯定你不能 re-open 直播。
但是,在我当前的项目中,我在构建登录时打开流 class。因此,当我登录时,我处理我的流,当我注销时,包含我的流的 bloc 是重建的,新流是 re-created.
可能不是最好的方法,但对我有用!
Log out
Building formbloc containing my streams