Skip to content

Commit 730af68

Browse files
committed
Fix iOS hang after denying required permission and then granted
1 parent 607ba3e commit 730af68

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

lib/src/views/disclosure_page.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,18 +237,24 @@ class _DisclosurePageState extends State<DisclosurePage>
237237
}
238238
} else {
239239
for (final Permission perm in item.config.permissions) {
240-
// ignore: avoid-ignoring-return-values, not needed.
241-
await widget._service.request(perm);
240+
// ignore: prefer-moving-to-variable, multiple calls needed to ensure up-to-date data.
241+
var permStatus = await widget._service.status(perm);
242+
if (permStatus != PermissionStatus.permanentlyDenied) {
243+
// ignore: avoid-ignoring-return-values, not needed.
244+
await widget._service.request(perm);
245+
}
242246

243247
if (item.config.required) {
244-
var permStatus = await widget._service.status(perm);
248+
// ignore: prefer-moving-to-variable, multiple calls needed to ensure up-to-date data.
249+
permStatus = await widget._service.status(perm);
245250
while (permStatus != PermissionStatus.granted) {
246251
await _showRequiredPermDialog(
247252
item.config.itemText,
248253
_showAppSettings,
249254
);
250255
// ignore: avoid-ignoring-return-values, not needed.
251256
await widget._resumed.stream.firstWhere((element) => element);
257+
// ignore: prefer-moving-to-variable, multiple calls needed to ensure up-to-date data.
252258
permStatus = await widget._service.status(perm);
253259
}
254260
}

test/widget_test/disclosure_page_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ void main() {
3030
.thenAnswer((realInvocation) => Future.value(prefs));
3131
when(testStub.request(Permission.location))
3232
.thenAnswer((realInvocation) => Future.value(PermissionStatus.granted));
33+
when(testStub.status(Permission.location))
34+
.thenAnswer((realInvocation) => Future.value(PermissionStatus.granted));
3335

3436
final config = FlutterForcePermissionConfig(
3537
title: 'Title',

0 commit comments

Comments
 (0)