Estoy intentando utilizar 'GeoLocator' para recuperar datos de Latitude & Longitud. Sin embargo, ¿no puedes obtener ningún resultado?
También sería útil si alguien pudiera ayudarme a organizar el paquete 'geoLocator' como un servicio en un archivo dart separado.
Como se sugirió, intenté cambiar el código, pero todavía no puedo obtener la geolocalización. Además, cuando llamo a '_determinePosition()' obtengo "Instancia de 'Futuro'
".
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
//
Future<Position> _determinePosition() async {
bool serviceEnabled;
LocationPermission permission;
// Test if location services are enabled.
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Location services are disabled.');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.deniedForever) {
// Permissions are denied forever, handle appropriately.
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
if (permission == LocationPermission.denied) {
return Future.error('Location permissions are denied');
}
}
return await Geolocator.getCurrentPosition();
}
@override
Widget build(BuildContext context) {
// TESTIST IF PRINT CAN WORK HERE
print(_determinePosition());
return Scaffold(
appBar: AppBar(
title: Text("Location"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextButton(
child: Text("Get location"),
onPressed: () {
// PRINTING IN THE CONSOLE
_determinePosition();
},
),
],
),
),
);
}
}
¿Agregaste permisos relevantes tanto para Android como para iOS como se especifica en el documento?
-glavigno
28/03/2021 a las 9:20
Sí en el AndroidManifest.
-Nikash Deka
3 de abril de 2021 a las 9:51
------------------------------------
Intente agregar el permiso de Internet además de los permisos de ubicación según la documentación (https://pub.dev/packages/geolocator):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Con respecto a obtener "instantancia de un futuro" en lugar del resultado, debes esperar la llamada a _determinatePosition() así:
onPressed: () async{
// PRINTING IN THE CONSOLE
await _determinePosition();
},
ParaAl usar Geolocator como servicio, recomiendo usar una solución de inyección de dependencia como Provider (https://pub.dev/packages/provider) o GetIt (https://pub.dev/packages/get_it)
------------------------------------
Utilice la siguiente función que comprueba el permiso y devuelve la posición actual, por lo que antes de obtener la ubicación es importante comprobar si hemos requerido el permiso o no.
import 'package:geolocator/geolocator.dart';
/// Determine the current position of the device.
///
/// When the location services are not enabled or permissions
/// are denied the `Future` will return an error.
Future<Position> _determinePosition() async {
bool serviceEnabled;
LocationPermission permission;
// Test if location services are enabled.
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
// Location services are not enabled don't continue
// accessing the position and request users of the
// App to enable the location services.
return Future.error('Location services are disabled.');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.deniedForever) {
// Permissions are denied forever, handle appropriately.
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
if (permission == LocationPermission.denied) {
// Permissions are denied, next time you could try
// requesting permissions again (this is also where
// Android's shouldShowRequestPermissionRationale
// returned true. According to Android guidelines
// your App should show an explanatory UI now.
return Future.error(
'Location permissions are denied');
}
}
// When we reach here, permissions are granted and we can
// continue accessing the position of the device.
return await Geolocator.getCurrentPosition();
}
2
Hola Jitesh, intenté cambiar el código como sugeriste, ¡pero aún así no se pudo recuperar ninguna ubicación en la consola!
-Nikash Deka
3 de abril de 2021 a las 20:22
Entonces, ¿después de agregar el permiso de ubicación, se está ejecutando?
- Jitesh Mohite
5 de abril de 2021 a las 10:30