我编写了一个API类,显然它封装了几个http请求。然而,这个API类还存储了一点状态:也就是说,它保存了一个身份验证令牌,该令牌将在第一个请求之后的所有后续请求中使用。
在我的flutter函数中,我首先等待设置该令牌,然后再执行其他操作:
Future<void> main() async {
var api = MyAPI();
await api.auth.refreshTokens(); // Sets api.auth.token
runApp(MaterialApp(etc));
这里重要的是,在etc
中,我还设置了提供商,其中之一就是API:
providers: [Provider(create: (context) => api), ...]
然后我想在整个应用程序中使用它。然而,这真的是最好的方法吗?简单地使用这个或多或少全局的API对象似乎是一种非常麻烦和混乱的方法。
通常是怎么做的?
您可以将该类编写为singleton,这样您就可以调用构造函数并每次获得相同的实例,而无需创建新实例:
void main() {
Api().call();
Api().call();
}
class Api {
static Api? _instance;
Api._();
factory Api() {
_instance ??= Api._();
return _instance!;
}
String token = '';
void call() {
token += '*';
print('new token $token');
}
}