如何在快速导航页面时处理 HTTP API 请求

s.a*_*m.i 1 http dart flutter flutter-pub

对于我的场景,我使用 flutter http 包来发出 http 请求...在主屏幕中,我必须发送大约 3 个 http 请求,因为我必须使用等待请求来一一发送。

我已经使用了 BaseAPiService 类,因此所有 API 调用都将通过该类,

如果我在发生上述请求时导航到另一个地方如何破坏该连接?否则,如果导航后应用程序还在等待之前的 API 请求完成。

使用的示例基本 API 服务类

class ApiService {
  apiGet(url, data) async {
  Get.dialog(LoadingDialog());
  var response;
  if (data == null) {
    response = await http.get(
    baseUrl + url,
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
    },
  );
}
Navigator.pop(Get.overlayContext);
return response;
}

apiPost(url, data) async {
  FocusScopeNode currentFocus = FocusScope.of(Get.context);
  if (!currentFocus.hasPrimaryFocus) {
  currentFocus.unfocus();
  }
  Get.dialog(LoadingDialog());
  var response;
  if (data != null) {
   response = await http.post(baseUrl + url,
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: data);
}
if (data == null) {
  response = await http.post(
    baseUrl + url,
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
    },
  );
}
Navigator.pop(Get.overlayContext);
return response;
}
}
Run Code Online (Sandbox Code Playgroud)

s.a*_*m.i 5

我找到了解决方案

要实现此目的,需要在导航时关闭 http 连接,为此需要从 http 创建一个客户端,并且需要在 dispose 方法上关闭该客户端

var client = http.Client()
var response = await client.get(url)
Run Code Online (Sandbox Code Playgroud)

导航时关闭连接

void dispose(){
  super.dispose();
  client.close()
}
Run Code Online (Sandbox Code Playgroud)