Cómo obtener la ubicación de un usuario con el complemento Geolocator en Flutter

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Configuración del proyecto
    1. Permisos de iOS
    2. Permisos de Android
  • Paso 2: Andamiaje del proyecto
  • Paso 3: obtención de la latitud y la longitud
  • Paso 4: Convertir la latitud y la longitud en una dirección legible para humanos
  • Conclusió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 geolocatorpaquete y un geocodingpaquete 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 geolocatory geocodingpara 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:
      • Fluttery Dartcomplementos instalados para Android Studio.
      • Flutterextensió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 geolocator6+ y geocoding1+.

    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:

    1. flutter create flutter_geolocator_example

    Navegue hasta el nuevo directorio del proyecto:

    1. cd flutter_geolocator_example

    El uso flutter createproducirá una aplicación de demostración que mostrará la cantidad de veces que se hace clic en un botón.

    Ábrelo pubspec.yamlen 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.plisty android/app/src/main/AndroidManifest.xml.

    Permisos de iOS

    Ábrelo Info.plisten 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 NSLocationAlwaysUsageDescriptiony NSLocationAlwaysAndWhenInUseUsageDescription.

    Permisos de Android

    Ábralo AndroidManifest.xmlen 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_LOCATIONes el más preciso, ya que ACCESS_COARSE_LOCATIONda 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.dartnuevo .home_page.dart

    Ábralo main.darten su editor de código e importe home_page.darty cambie el homede MyHomePagea 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.dartarchivo 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 Geolocatory 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.darty 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 latitudenombre 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 latitudey longitudecoordinar a placemarkFromCoordinatesse devolverá un Placemark. Placemarkque contiene información como locality, postalCode, y country.

    Revisar home_page.darty 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 geolocatory geocodingen 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.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion