2
votes

Comment obtenir la position actuelle sur Flutter SDK 1.2.1

Comment puis-je obtenir la position actuelle sur un appareil Android à l'aide du flutter. J'ai essayé à la fois Location et < a href = "https://pub.dartlang.org/packages/geolocator" rel = "nofollow noreferrer"> Plugins GeoLocator le GeoLocator 3.0.0 affiche cette erreur lors du débogage: < pre> XXX

ÉCHEC: la construction a échoué avec une exception.

  • Ce qui n'a pas fonctionné: L’exécution a échoué pour la tâche «: app: preDebugBuild».

    La dépendance Android 'android.arch.lifecycle: runtime' a une version différente pour le chemin de classe de compilation (1.0.0) et d'exécution (1.1.0). Vous devez définir manuellement la même version via DependencyResolution

Location 2.0.0 génère également une erreur de débogage. Il existe un autre plugin disponible nommé geoLocation mais qui n'est pas compatible avec dart 2.0. Dans une telle situation, comment puis-je obtenir l'emplacement (longitude et latitude) [une fois]? Toute aide serait très appréciée.


2 commentaires

Avez-vous ajouté l'autorisation à AndroidManifest.xml?


Ouaip. Il n'y a aucun problème avec la permission. J'ai également utilisé le plugin uses_permission pour les appareils Android 6+ pour demander explicitement l'autorisation.


4 Réponses :


2
votes

Il est possible que jusqu'à présent, vous ayez trouvé une solution, mais j'ajoute toujours ceci pour que d'autres puissent obtenir de l'aide

utiliser le géolocalisateur pour obtenir la position actuelle

Dans pubsec.yaml p>

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';

void main() => runApp(MapScreen());

class MapScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Map",
      home: MapActivity(),
    );
  }
}

class MapActivity extends StatefulWidget {
  @override
  _MapActivityState createState() => _MapActivityState();
}

class _MapActivityState extends State<MapActivity> {
  LatLng _center ;
  Position currentLocation;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    getUserLocation();
  }

 Future<Position> locateUser() async {
    return Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
  }

  getUserLocation() async {
    currentLocation = await locateUser();
    setState(() {
      _center = LatLng(currentLocation.latitude, currentLocation.longitude);
    });
    print('center $_center');
  }
}

Dans votre fichier de fléchettes

  geolocator: '^2.0.1'

J'espère que cela vous aidera


1 commentaires

Merci. J'ai eu ce problème en raison d'un conflit de bibliothèques et la mise à jour de mon projet vers les bibliothèques Android x a résolu l'erreur.



0
votes

Le plugin geoLocator que j'ai installé utilisait les bibliothèques Android x jetpack alors que mon projet utilisait des bibliothèques de support donc ce conflit était à l'origine du problème et lorsque j'ai mis à jour mon projet pour utiliser les bibliothèques Android x, le problème a été résolu.


0 commentaires

10
votes

Suivez ces étapes pour obtenir la position sur IOS et Android.

  1. Ajoutez géolocalisateur: ^ 4.0.3 dans votre fichier pubspec.yaml sous les dépendances: tag
  2. Ajoutez import 'package: geolocator / geolocator.dart'; dans votre fichier de fléchettes où vous devez obtenir l'emplacement
  3. Afin d'obtenir l'emplacement pour Android, ajoutez les autorisations suivantes dans le fichier manifeste du projet Android

  1. Pour IOS, vous devrez ajouter les lignes suivantes dans votre fichier info.plist sous dans le projet IOS

    NSLocationWhenInUseUsageDescription

    Cette application doit accéder à l'emplacement lorsqu'elle est ouverte.

  2. Fonction pour obtenir la position

    void getLocation () async { Position position = attendre Geolocator () .getCurrentPosition (souhaitéAccuracy: LocationAccuracy.high); imprimer (position); }

Bravo!


2 commentaires

Pour moi, cela échoue toujours. Obtenir cette erreur. E / location_permissions (24439): L'objet de résultat Flutter est nul.


n'obtient toujours pas l'emplacement actuel



1
votes
  1. Ajoutez le plug-in GeoLocation dans pubsec.yaml
    géolocalisateur: ^ 6.0.0

  2. Lancez flutter pub get

  3. Ajoutez des autorisations de localisation pour Android dans app / src / main / AndroidManifest.xml

  4. GoogleMap(
                 // onMapCreated: _onMapCreated,
                 initialCameraPosition: CameraPosition(
                   target: currentPostion,
                   zoom: 10,
                 ),  
               ),
    
    1. Pour iOS , ajoutez les clés suivantes dans info.plist
    LatLng currentPostion;
    
    void _getUserLocation() async {
            var position = await GeolocatorPlatform.instance
                .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
        
            setState(() {
              currentPostion = LatLng(position.latitude, position.longitude);
            });
          }
    
    1. Fonction Creart pour récupérer la position actuelle de l'utilisateur:
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>This app needs access to location when open.</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>This app needs access to location when in the background.</string>
    
    1. Utilisez currentPostion dans votre googlemap. (définir Latlag currentPosition);
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    

1 commentaires

Le numéro 3 a fonctionné pour moi! je n'en ai essayé qu'un seul avant, pas les 3 en même temps :) ... Merci!