Flutter:无需等待服务器响应即可处置 Bloc

Flutter: Bloc dispose without waiting for the server response

用户一进入页面,就会执行对服务器的调用。如果快照有数据,将发送一个流到 UI 并创建一个 ListView,否则,如果快照有错误,将下沉一个流错误消息。

那么,我的电话是:

try {
      List answer = await call();
      createList.sink.add(answer);
    } on Exception catch (e) {
      createList.sink.addError(e);
    }

问题是:如果连接很慢,并且用户在调用完成之前退出了那个页面,控制器将被处理掉,应用程序会抱怨错误无法在我处理完后下沉控制器。 那么,有没有办法在用户退出页面时"abort"调用服务器?

使用控制器的 isClosed 属性,您可以在添加事件之前检查控制器是否已关闭,如下所示:

try {
  List answer = await call();
  if (!createList.isClosed) {
    createList.sink.add(answer);
  }
} on Exception catch(e) {
  if (!createList.isClosed) {
    createList.sink.addError(e);
  }
}