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);
}
}
用户一进入页面,就会执行对服务器的调用。如果快照有数据,将发送一个流到 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);
}
}