Ao permitir a permissão de localização, está funcionando bem, mas ao negar a permissão de localização, estou recebendo a seguinte mensagem de erro.
Erro de dardo: exceção não tratada:
PlatformException (PERMISSION_DENIED, acesso aos dados de localização negado, nulo)
O comportamento esperado deve me dar uma resposta nula, para que possamos prosseguir.
Importar pub em pubspec.yaml
Escreva o seguinte código para qualquer evento de toque de botão
Experimente {
Posição posição = espera geolocator ()
.getCurrentPosition (desejadoAccuracy: LocationAccuracy.high);
} catch (e) {
imprimir (e);
}
você terá um erro.
Versão: 1.0.1
[✓] Flutter (Canal mestre, v1.0.1-pre.2, no Mac OS X 10.14 18A384a, local en-GB)
[✓] Conjunto de ferramentas Android - desenvolver para dispositivos Android (Android SDK 28.0.3)
[✓] conjunto de ferramentas iOS - desenvolver para dispositivos iOS (Xcode 10.1)
[✓] Android Studio (versão 3.2)
[✓] Código VS (versão 1.29.1)
[✓] Dispositivo conectado (1 disponível)
• Nenhum problema encontrado!
Plataforma:
Você já resolveu como lidar com isso
Alguma solução alternativa para isso?
@YogeshLegendkiller @kaumudpa se quiser uma solução alternativa, tente capturar a chamada e retornar null em PlatformException.
@YogeshLegendkiller , @kaumudpa , a solução fornecida por @jaumard é a forma sugerida de resolver este problema.
Outra abordagem seria usar o método checkGeolocationPermissionStatus
e certificar-se de que o status está definido como PermissionStatus.granted
antes de chamar getCurrentPosition
, getLastKnownPosition
ou getPositionStream
métodos. No entanto, isso significaria que você precisa tomar cuidado ao solicitar permissões você mesmo. Por exemplo:
Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
Position position = await geolocator.getCurrentPosition();
}
Como pedir permissão?
@ abdullah4one Você pode usar permission_handler e pedir permissão como esta:
import 'package:permission_handler/permission_handler.dart';
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
Pode ser tarde para responder, mas eu também estava enfrentando o mesmo problema em que o aplicativo não estava pedindo permissão no iOS e estava funcionando perfeitamente bem no Android.
Como não foi solicitada a permissão, é por isso que o código de permissão não estava funcionando para iOS. Eu encontrei um pacote chamado "location_permissions" que pode ser usado para pedir permissão manualmente.
Os passos a seguir são os seguintes
Importar o pacote no arquivo
import ' package: location_permissions / location_permissions.dart ';
Adicione o seguinte código na página onde deseja pedir permissão. (Melhor adicionar isso na primeira página do seu aplicativo.)
<strong i="16">@override</strong>
void initState() {
....
if (Platform.isIOS) {
location_permission();
}
....
}
Adicione os dois métodos a seguir no mesmo arquivo
void location_permission () async {
permissão final PermissionStatus = await _getLocationPermission ();
if (permission == PermissionStatus.granted) {
posição final = espera geolocator.getCurrentPosition (
desejadoAccuracy: LocationAccuracy.best);
// Use the position to do whatever...
}
}
Futuro
permissão final de PermissionStatus = espera LocationPermissions ()
.checkPermissionStatus (nível: LocationPermissionLevel.location);
if (permission != PermissionStatus.granted) {
final PermissionStatus permissionStatus = await LocationPermissions()
.requestPermissions(
permissionLevel: LocationPermissionLevel.location);
return permissionStatus;
} else {
return permission;
}
}
É isso agora você deve obter um pop-up no aplicativo iOS que pedirá a permissão de localização.
Comentários muito úteis
@YogeshLegendkiller , @kaumudpa , a solução fornecida por @jaumard é a forma sugerida de resolver este problema.
Outra abordagem seria usar o método
checkGeolocationPermissionStatus
e certificar-se de que o status está definido comoPermissionStatus.granted
antes de chamargetCurrentPosition
,getLastKnownPosition
ougetPositionStream
métodos. No entanto, isso significaria que você precisa tomar cuidado ao solicitar permissões você mesmo. Por exemplo: