flutter - Flutter GeoLocator PermissionRequestInProgressException
问题描述
我正在使用 Flutter Geolocator 包,并使用以下代码:
void determinePosition() async {
Position currentPosition;
try {
currentPosition = await Geolocator
.getCurrentPosition(desiredAccuracy: LocationAccuracy.best);
} on TimeoutException {
_streamError('Location request timed out.');
} on PermissionDeniedException {
_streamError('Location permissions are denied.');
} on LocationServiceDisabledException {
_streamError('Location services are disabled.');
} on PermissionRequestInProgressException {
_streamError('Permission in progress.');
// Do nothing. A strange bug in the library that causes an exception on first request IMO
}
_streamSuccess(currentPosition);
}
它工作得很好,因为要求用户提供津贴,如下所示:
但是,当我点击“允许一次”时,它会引发异常:
我第二次浏览代码时,按预期获取了当前位置。
显然,我可以通过determinePosition
使用一些失败计数器递归调用异常来解决这个问题,但我发现这个解决方案非常愚蠢。
其他人一直有这个问题,或者我得到这个异常的原因是什么?
预期的行为显然是在“允许”点击时返回当前位置。
一直没能在网上找到信息。
解决方案
选择了糟糕的解决方案,没有时间浪费在愚蠢的问题上:
Future<void> determinePosition() async {
Position currentPosition;
try {
currentPosition = await Geolocator
.getCurrentPosition(
desiredAccuracy: LocationAccuracy.best
);
_retryCount = 0;
} on TimeoutException {
_streamError('Location request timed out.');
} on PermissionDeniedException {
_streamError('Location permissions are denied.');
} on LocationServiceDisabledException {
_streamError('Location services are disabled.');
} on PermissionRequestInProgressException {
if (_retryCount < RETRY_COUNT) {
_retryCount++;
await determinePosition();
}
}
_streamSuccess(currentPosition);
}
我在这里提过:https ://github.com/Baseflow/flutter-geolocator/issues/450
推荐阅读
- python - 安装 anaconda 后的 Anaconda3 和基础环境
- c# - C# 在使用 XMLSerializer 时从 url 读取 XML
- python - 在包含列表的 Pandas 列中查找字符串
- azure - 创建 SSL/TLS 安全通道的问题
- java - Java文件输入拆分
- php - 订购仅以天、小时、分钟保存的每周国际活动?
- javascript - 无法在 javascript 的 for 循环中求和值
- python - 张量流模型中的BatchNormalization
- c# - 将 neo4j 结果返回到 C# 对象
- python - 我需要使用 matplotlib 或 seaborn 绘制分组数据