【发布时间】:2022-01-11 07:54:13
【问题描述】:
我有一个带有同步方法 bool doLogin(String username, String password) 的 Dart 类。
doLogin() 调用内部方法_queryServer(),而后者又调用http.Response response = await http.post()。
“_queryServer()”需要异步,以便使用“await”(或使用“.then()”)。 “doLogin()”必须不是异步的。
问:如何构建我的代码,使 doLogin() 在 _queryServer() 得到响应(或失败)之前不返回?
我的代码如下所示:
...
Future<void> _queryServer (username, password) async {
final headers = {'Content-Type': 'application/json'};
Map<String, dynamic> logonRequest = {
"username": username,
"password": password
};
String jsonPayload = jsonEncode(logonRequest);
http.Response response = await http.post(
Uri.parse("https://myserver/login"),
headers: headers,
body: jsonPayload,
);
if (response.statusCode == 200) {
_isAuthorized = true;
}
}
...
bool login(String username, String password) {
_queryServer(username, password);
// Q: How do I block until _queryServer() completes?
return _isAuthorized;
}
【问题讨论】:
-
没有支持的方法来做到这一点。
login应该是异步的(以及它的调用者,等等)。 -
这正是问题所在。我不能使登录异步。更不用说它的调用者了,等等…… 问:也许 Flutter 有一个类可以同步地进行 HTTP “post”?
-
如果您不能正确地使
login异步(为什么不呢?),那么您需要提供一个单独的 API 供调用者在查询完成时检查(并且可能会收到通知)。
标签: flutter dart async-await