何时在Flutter应用中关闭HTTP客户端?

时间:2019-08-23 09:58:43

标签: flutter dart

我的Flutter移动应用程序与我的后端服务器通信。文档说,使用Client类(IOClient)比使用普通getput等方法来维护跨多个请求到同一服务器的持久连接要好。 Docs还说:

  

在使用完每个客户端后,关闭它们非常重要;失败   这样做会导致Dart进程挂起。

我不知道何时需要关闭客户端,因为几乎所有应用程序屏幕都需要HTTP连接到同一服务器。这里的最佳做法是什么?

更新

是否可以在应用终止之前关闭Client,还是应该在每次隐藏应用时都将其关闭(进入paused状态)?

1 个答案:

答案 0 :(得分:1)

如果您在所有应用程序中不断使用Client,请在Application类内将其关闭。您正在内部使用MaterialAppCupertinoApp的类。设为StatefulWidget,因为我们将使用它的生命周期。

一个例子:

// This is our Api class, it should be singleton to handle easily
// and probably we won't need extra instances of our Api class
class Api {
  final client = http.Client();

  Api._internal();

  static final _singleton = Api._internal();

  factory Api() => _singleton;

}

final api = Api();

// This is our App class
class App extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp();
  }

//  Alternative way to dispose
//  @override
//  void deactivate() {
//    api.client.close();
//    super.deactivate();
//  }

  @override
  void dispose() {
    api.client.close();
    super.dispose();
  }
}

为什么使用这种方法?因为如果使用您的应用程序,您的App类将一直处于活动状态。关闭后,我们的App类也将被处置。

解决方案/方法太多,但是如果您不是专家或其他人,则可以轻松使用它。