flutter - 未处理的异常:错误状态:流已被收听
问题描述
我有以下代码在成功验证后将用户导航到主屏幕
Future navigateToHomeScreen(
StreamedResponse value,
BuildContext context,
) async {
print('Navigating to Home Screen');
String userString = await value.stream.bytesToString();
Map<String, dynamic> logInResponseData = jsonDecode(userString)['data'];
UserManager.persistUser(logInResponseData);
Navigator.of(context).pushReplacementNamed(HomeWidget.routePath);
}
成功注册或登录后,调用上述函数,但我不断收到:
Unhandled Exception: Bad state: Stream has already been listened to.
我该如何解决?
解决方案
您不能将多个侦听器添加到常规流中。在您的代码中,如果您的 navigateToHomeScreen 函数被多次调用,那么您基本上是在向流中添加了那么多侦听器。你有两种方法可以修复它。
检查流是否已经有任何监听器。如果有,请在添加新之前将其删除。
这有点容易,但不是最好的解决方案。您可以通过执行以下操作将流转换为广播流: value.stream.asBroadcastStream().bytesToString(); 这会将您的常规流转换为广播流。通过这样做,您可以将多个侦听器添加到您的流中,原因是这不是最佳选择,因为如果您以前的流侦听器没有被杀死,他们将不断收到通知并继续消耗您的阅读。如果您使用的服务是根据读写向您收费的(例如 cloud firestore),那么这可能不是一个好主意。
https://medium.com/flutter-community/flutter-stream-basics-for-beginners-eda23e44e32f这是一个链接,可以更好地了解 Dart 和 Flutter 中的 Streams
推荐阅读
- r - 使用 ggpubr - R 标记每个图
- python - 使用 pymongo 在 mongoDB 中查找
- c - Windows C 套接字,从套接字流中读取 N 个字节
- c++ - gRPC 生成的代码缺少服务实现
- python-3.x - 编译后从依赖项导入变量
- python - IDLE交互模式清屏
- visual-studio-2019 - 打开代码分析规则集编辑器会导致 Visual Studio 崩溃
- python - 为什么用 Plotly 显示热图时会出现这个问题?
- string - Sim800l 将输入保存为字符串
- javascript - XMLHttpRequest 获取昵称值和权限值