Cómo obtener la ubicación de un usuario con el complemento Geolocator en Flutter
Introducción
La geolocalización es el proceso de identificar la ubicación física actual de un usuario cuando interactúa con su aplicación.
Hay un geolocator
paquete y un geocoding
paquete para Flutter que se pueden usar para la geolocalización.
En este artículo, creará una aplicación Flutter de ejemplo que utiliza los paquetes geolocator
y geocoding
para determinar la ubicación de un usuario.
Prerrequisitos
Para completar este tutorial, necesitarás:
- Para descargar e instalar Flutter .
- Para descargar e instalar Android Studio o Visual Studio Code .
- Se recomienda instalar complementos para su editor de código:
Flutter
yDart
complementos instalados para Android Studio.Flutter
extensión instalada para Visual Studio Code.
Este tutorial se verificó con Flutter v1.22.2, Android SDK v30.0.2 y Android Studio v4.1. El código de este tutorial se actualizó para admitir geolocator
6+ y geocoding
1+.
Paso 1: Configuración del proyecto
Una vez que haya configurado su entorno para Flutter, puede ejecutar lo siguiente para crear una nueva aplicación:
- flutter create flutter_geolocator_example
Navegue hasta el nuevo directorio del proyecto:
- cd flutter_geolocator_example
El uso flutter create
producirá una aplicación de demostración que mostrará la cantidad de veces que se hace clic en un botón.
Ábrelo pubspec.yaml
en tu editor de código y agrega los siguientes complementos:
archivo pubspec.yaml
dependencies: flutter: sdk: flutter geocoding: ^1.0.5 geolocator: ^6.1.1
Nota: Deberás asegurarte de que tu proyecto Android use AndroidX para esto. Si has creado una aplicación Flutter después de la versión 1.7, esto viene de manera predeterminada. De lo contrario, sigue esta guía: Migración a AndroidX .
Luego tendrás que agregar permisos tanto para Android como para iOS editando ios/Runner/Info.plist
y android/app/src/main/AndroidManifest.xml
.
Permisos de iOS
Ábrelo Info.plist
en tu editor de código y agrega NSLocationWhenInUseUsageDescription
, NSLocationAlwaysUsageDescription
, y NSLocationAlwaysAndWhenInUseUsageDescription
:
A partir de iOS y Info.plist
, agregue los siguientes pares clave/valor y personalícelos a su gusto:
ios/Runner/Info.plist
keyNSLocationWhenInUseUsageDescription/keystringThis app needs access to location when open./stringkeyNSLocationAlwaysUsageDescription/keystringThis app needs access to location when in the background./stringkeyNSLocationAlwaysAndWhenInUseUsageDescription/keystringThis app needs access to location when open and in the background./string
Si no desea brindar soporte a aplicaciones iOS anteriores a iOS 10 y no desea obtener la ubicación del usuario cuando la aplicación no está en uso, puede omitir la adición de NSLocationAlwaysUsageDescription
y NSLocationAlwaysAndWhenInUseUsageDescription
.
Permisos de Android
Ábralo AndroidManifest.xml
en su editor de código y agregue uno de los siguientes.
ACCESS_FINE_LOCATION
:
android/aplicación/src/main/AndroidManifest.xml
uses-permission android_name="android.permission.ACCESS_FINE_LOCATION" /
O ACCESS_COARSE_LOCATION
:
android/aplicación/src/main/AndroidManifest.xml
uses-permission android_name="android.permission.ACCESS_COARSE_LOCATION" /
ACCESS_FINE_LOCATION
es el más preciso, ya que ACCESS_COARSE_LOCATION
da resultados equivalentes a aproximadamente una manzana de la ciudad.
Una vez completada esta configuración, puedes crear el widget que activará y mostrará la ubicación actual del usuario.
Paso 2: Andamiaje del proyecto
A continuación, deberá actualizar el archivo y crear un archivo main.dart
nuevo .home_page.dart
Ábralo main.dart
en su editor de código e importe home_page.dart
y cambie el home
de MyHomePage
a HomePage
:
lib/main.dart
import 'package:flutter/material.dart';import 'home_page.dart';void main() { runApp(MyApp());}class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: HomePage(), ); }}
Luego, crea un nuevo home_page.dart
archivo y agrega el siguiente código:
lib/página_de_inicio.dart
import 'package:flutter/material.dart';class HomePage extends StatefulWidget { @override _HomePageState createState() = _HomePageState();}class _HomePageState extends StateHomePage { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Location"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: Widget[ FlatButton( child: Text("Get location"), onPressed: () { // Get location here }, ), ], ), ), ); }}
Esto creará un botón con el mensaje "Get location"
.
Paso 3: obtención de la latitud y la longitud
El siguiente paso es agregar la funcionalidad de geolocalización.
Puede lograrlo creando una instancia de Geolocator
y llamando a getCurrentPosition
. Esto debería preguntar al usuario si está interesado en usar la función Ubicación y, de ser así, obtener la ubicación actual como un Position
.
Revisar home_page.dart
y agregar _getCurrentLocation()
:
lib/página_de_inicio.dart
import 'package:flutter/material.dart';import 'package:geolocator/geolocator.dart';class HomePage extends StatefulWidget { @override _HomePageState createState() = _HomePageState();}class _HomePageState extends StateHomePage { Position _currentPosition; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Location"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: Widget[ if (_currentPosition != null) Text( "LAT: ${_currentPosition.latitude}, LNG: ${_currentPosition.longitude}" ), FlatButton( child: Text("Get location"), onPressed: () { _getCurrentLocation(); }, ), ], ), ), ); } _getCurrentLocation() { Geolocator .getCurrentPosition(desiredAccuracy: LocationAccuracy.best, forceAndroidLocationManager: true) .then((Position position) { setState(() { _currentPosition = position; }); }).catchError((e) { print(e); }); }}
Compila tu código y ejecútalo en un emulador:
Cuando interactúes con el botón Obtener ubicación , es posible que veas un mensaje solicitando acceso a tu aplicación. Una vez que permitas el acceso a tu ubicación, aparecerá en la pantalla el latitude
nombre de tu ubicación actual.longitude
Paso 4: Convertir la latitud y la longitud en una dirección legible para humanos
El siguiente paso es convertir las coordenadas para mostrar una dirección.
Al pasar latitude
y longitude
coordinar a placemarkFromCoordinates
se devolverá un Placemark
. Placemark
que contiene información como locality
, postalCode
, y country
.
Revisar home_page.dart
y agregar _getAddressFromLatLng_()
:
lib/página_de_inicio.dart
import 'package:flutter/material.dart';import 'package:geocoding/geocoding.dart';import 'package:geolocator/geolocator.dart';class HomePage extends StatefulWidget { @override _HomePageState createState() = _HomePageState();}class _HomePageState extends StateHomePage { Position _currentPosition; String _currentAddress; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Location"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: Widget[ if (_currentAddress != null) Text( _currentAddress ), FlatButton( child: Text("Get location"), onPressed: () { _getCurrentLocation(); }, ), ], ), ), ); } _getCurrentLocation() { Geolocator .getCurrentPosition(desiredAccuracy: LocationAccuracy.best, forceAndroidLocationManager: true) .then((Position position) { setState(() { _currentPosition = position; _getAddressFromLatLng(); }); }).catchError((e) { print(e); }); } _getAddressFromLatLng() async { try { ListPlacemark placemarks = await placemarkFromCoordinates( _currentPosition.latitude, _currentPosition.longitude ); Placemark place = placemarks[0]; setState(() { _currentAddress = "${place.locality}, ${place.postalCode}, ${place.country}"; }); } catch (e) { print(e); } }}
Compila tu código y ejecútalo en un emulador:
Cuando interactúes con el botón Obtener ubicación , es posible que veas inicialmente un mensaje solicitando acceso a tu aplicación. Una vez que permitas el acceso a tu ubicación, se mostrarán en la pantalla tus locality
, postalCode
, y .county
Conclusión
En este tutorial, utilizó paquetes geolocator
y geocoding
en una aplicación Flutter.
Si desea obtener más información sobre Flutter, consulte nuestra página de temas de Flutter para ver ejercicios y proyectos de programación.
Deja una respuesta