carry
carry

Reputation: 91

2 permission requests appear one after another?

My code is supposed to ask two permission right after another but some how it show 2 permission requests one after another.

What do I have to do to fix this?

Future<void> checkContactPermission() async {
  var status = await Permission.contacts.status;
  if (!status.isGranted) {
    PermissionStatus permissionStatus = await Permission.contacts.request();
    if (status.isDenied) {
      PermissionStatus permissionStatus = await Permission.contacts.request();
    }
  }
  if (status.isGranted) {
    var contacts = await ContactsService.getContacts(withThumbnails: false);
    var list = contacts;
    list.shuffle();
    var FamilyMember = (list.first.phones?.first.value);
    await FlutterPhoneDirectCaller.callNumber('$FamilyMember');
  }
}

Upvotes: 0

Views: 163

Answers (1)

Raouf Rahiche
Raouf Rahiche

Reputation: 31386

You are checking the outdated status here

if (status.isDenied) {
  PermissionStatus permissionStatus = await Permission.contacts.request();
}

Refresh the status before using checking again

Future<void> checkContactPermission() async {
  var status = await Permission.contacts.status;
  if (!status.isGranted) {
    PermissionStatus permissionStatus = await Permission.contacts.request();
    status = await Permission.contacts.status;
    if (status.isDenied) {
      PermissionStatus permissionStatus = await Permission.contacts.request();
    }
  }
  if (status.isGranted) {
    var contacts = await ContactsService.getContacts(withThumbnails: false);
    var list = contacts;
    list.shuffle();
    var FamilyMember = (list.first.phones?.first.value);
    await FlutterPhoneDirectCaller.callNumber('$FamilyMember');
  }
}

Or use the result status from

PermissionStatus permissionStatus = await Permission.contacts.request();

Upvotes: 1

Related Questions