【问题标题】:Unhandled Exception: Bad State: Stream has already been listened to未处理的异常:错误状态:流已被收听
【发布时间】:2021-06-19 20:35:15
【问题描述】:

我有以下代码在成功验证后将用户导航到主屏幕

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.

我该如何解决这个问题?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您不能将多个侦听器添加到常规流中。在您的代码中,如果您的 navigateToHomeScreen 函数被多次调用,那么您基本上是在向流中添加了那么多侦听器。您有两种方法可以修复它。

    1. 检查流是否已经有任何监听器。如果有,请在添加新之前将其删除。

    2. 这有点容易,但不是最好的解决方案。您可以通过执行以下操作将流转换为广播流: value.stream.asBroadcastStream().bytesToString();这会将您的常规流转换为广播流。通过这样做,您可以将多个侦听器添加到您的流中,原因是这不是最佳选择,因为如果您以前的流侦听器没有被杀死,他们将不断收到通知并继续消耗您的阅读。如果您使用的服务是根据读写向您收费的(例如 cloud firestore),那么这可能不是一个好主意。

    https://medium.com/flutter-community/flutter-stream-basics-for-beginners-eda23e44e32f这是一个链接,可以更好地了解 Dart 和 Flutter 中的 Streams

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 1970-01-01
      • 2020-03-08
      • 2023-02-16
      • 2019-07-23
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多