我的Flutter移动应用程序与我的后端服务器通信。文档说,使用Client
类(IOClient
)比使用普通get
,put
等方法来维护跨多个请求到同一服务器的持久连接要好。
Docs还说:
在使用完每个客户端后,关闭它们非常重要;失败 这样做会导致Dart进程挂起。
我不知道何时需要关闭客户端,因为几乎所有应用程序屏幕都需要HTTP连接到同一服务器。这里的最佳做法是什么?
更新:
是否可以在应用终止之前关闭Client
,还是应该在每次隐藏应用时都将其关闭(进入paused
状态)?
答案 0 :(得分:1)
如果您在所有应用程序中不断使用Client
,请在Application
类内将其关闭。您正在内部使用MaterialApp
或CupertinoApp
的类。设为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类也将被处置。
解决方案/方法太多,但是如果您不是专家或其他人,则可以轻松使用它。