用户进入页面后,将立即执行对服务器的调用。如果快照中有数据,则将流发送到UI,以创建一个ListView;否则,如果快照中有错误,将接收流错误消息。

因此,我的电话是:

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

问题是:如果连接速度很慢,并且用户在通话完成前退出了该页面,则将处置 Controller ,并且在我处置 Controller 后,应用程序将抱怨无法清除该错误。
那么,有没有一种方法可以在用户退出页面时“中止”对服务器的调用?

最佳答案

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

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

10-08 16:35