Flutter-geolocator: geolocator.getCurrentPosition prend beaucoup de temps pour retourner la position sur IOS

Créé le 30 août 2019  ·  72Commentaires  ·  Source: Baseflow/flutter-geolocator

getCurrentPosition fonctionne très bien sur Android, mais sur IOS, il a fallu beaucoup de temps pour s'exécuter. Peux-tu le vérifier? Merci
Plate-forme:

  • [x]: iphone: iOS
  • []: robot: Android
ios bug duplicate

Commentaire le plus utile

@babaosoftware Merci pour vos efforts. J'ai testé le même problème et suis arrivé à la même conclusion que vous. Nous travaillerons sur ce problème et vous tiendrons au courant lorsqu'il y aura une solution à ce problème.

Tous les 72 commentaires

Rencontrer le même problème. Je n'ai pas trouvé la cause du ralentissement jusqu'à présent, mais en utilisant la dernière position connue comme solution temporaire pour mon cas ...

vérifiez si votre Info.plist a 3 clés
NSLocationAlwaysUsageDescription
Votre description
NSLocationWhenInUseUsageDescription
Votre description
NSLocationAlwaysAndWhenInUseUsageDescription
Votre description

Même problème ici. J'ai dû passer à la version 4.0.3 du plugin Geolocator. Chaque version ultérieure est très lente à répondre dans iOS.
Et oui, @paulobreim j'ai toutes les chaînes requises dans Info.plist, sinon il ne répondrait pas du tout.

J'utilise le plugin Location pour obtenir l'emplacement actuel. Cela fonctionne bien sur Android et IOS.

@ hungtran2492 J'utilise aussi le plugin Location, c'est beaucoup plus rapide que ça.

@StijnWoerkom quelle est la raison de la fermeture? Il s'agit d'un bogue légitime qui cause des problèmes aux développeurs sur la bibliothèque de localisation principale de Flutter.

@ollydixon J'ai testé ce problème sur plusieurs appareils IOS et j'ai conclu que le problème

@StijnWoerkom si cela aide, j'ai fait une démo d'application en direct avec 4 utilisateurs et c'était lent sur tous leurs mobiles. (Tous iOS). C'était un peu gênant pour moi car le simulateur fonctionne bien, c'est seulement sur l'appareil qu'il est extrêmement lent.

J'ai utilisé une autre bibliothèque et c'était bien (emplacement pour Flutter).

La version 4.0.3 fonctionne très bien. J'ai en fait rétrogradé à cette version sur mon application. Il doit donc y avoir quelque chose dans la bibliothèque elle-même. J'ai fait des tests avec différents iPhones, c'est cohérent, donc je doute que ce soit l'appareil.

@ollydixon Merci pour votre réponse. Je suis désolé pour votre échec avec la démo. J'ai rouvert le numéro et j'y reviendrai plus en détail. Pouvez-vous me dire quelle version vous utilisiez?

@StijnWoerkom pas de soucis, ils savaient que c'était une version alpha. C'était 5.1.3.

Toute version postérieure à 4.0.3 a le problème. Il doit donc s'agir de quelque chose d'introduit dans la version 5.0.0.

@babaosoftware Dans la version 5.0.0, nous avons converti la version IOS de Swift en Objective-C, réduisant considérablement la taille du binaire final, et résolvons certains problèmes de compatibilité avec d'autres plugins basés sur objective-c.

@StijnWoerkom Je ne

J'ai remarqué que vous m'aviez dit hier que les problèmes avaient commencé avec la version 5.0.0. J'examine toutes les fonctionnalités que nous avons ajoutées à la version pour déterminer la cause du problème.

Permettez-moi de suggérer une alternative à l'isolement du problème, s'il existe vraiment.
Nous pouvons faire un petit programme avec la fonction geolocator.getCurrentPosition uniquement, et tout le monde peut tester ce programme et mesurer le temps qu'il s'exécute.
Qu'est-ce que tu penses?

@paulobreim J'allais faire exactement cela ce soir (heure de l'Est des États-Unis). Je publierai mon résultat dès que je les aurai.

J'ai fait le test suivant:
L'application:
import ' package: flutter / foundation.dart ';
import ' package: geolocator / geolocator.dart ';
void main () {
DateTime début = DateTime.now ();
getCurrentPosition (). then ((pos) {
DateTime end = DateTime.now ();
debugPrint ("time span = $ {end.difference (start) .inMilliseconds} ms");
});
}
FuturgetCurrentPosition () async {
return wait Geolocator (). getCurrentPosition ();
}

dans pubspec.yaml j'ai
geolocator: ^ 4.0.3 # Ne pas mettre à niveau - il est très lent à répondre au démarrage.
pour le premier test, et
géolocalisateur: ^ 5.1.4
pour le deuxième test.
J'ai testé avec un iPhone 6S, mais avant d'utiliser des appareils plus récents, je ne pense donc pas que l'appareil fasse une différence.
Le premier test, avec la version 4.0.3, a montré un temps de réponse d'environ 100 ms
Le deuxième test, avec la version 5.1.4. a montré un temps de réponse d'environ 10 s - c'est-à-dire secondes, pas ms
Voilà.

J'essaie de le tester sur mon Motorola Z2 Play et un iPhone, mais j'ai l'erreur ci-dessous et je ne sais pas quoi faire.

Lancement de lib / main.dart sur le SDK Android construit pour x86 en mode débogage ...
Initialisation de gradle ...
Résolution des dépendances ...
Exécution de la tâche Gradle 'assembleDebug' ...

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

  • Qu'est ce qui ne s'est pas bien passé:
    L'exécution a échoué pour la tâche «: app: preDebugBuild».
    > Dépendance Android 'androidx. core: core 'a une version différente pour le chemin de classe compile (1.0.0) et runtime (1.0.2). Vous devez définir manuellement la même version via DependencyResolution

Je sais qu'il n'y a pas de relations avec le géolocalisateur, mais je ne sais pas pour le réparer.

«androidx. core: core 'a une version différente pour le chemin de classe compile (1.0.0) et runtime (1.0.2)

Vérifiez ça:
https://github.com/flutter/flutter/issues/27254

Voici mon test pour Android.
J'ai mis un FloatingActionButton et appuyé 10 fois

Géolocalisateur PREMIER TEST: ^ 4.0.3
Lancement de lib / main.dart sur Moto Z2 Play en mode débogage ...
Initialisation de gradle ...
Résolution des dépendances ...
Exécution de la tâche Gradle 'assembleDebug' ...
Construit build / app / sorties / apk / debug / app-debug.apk.
Synchronisation des fichiers avec l'appareil Moto Z2 Play ...
I / flutter (11197): intervalle de temps = 1006 ms
I / flutter (11197): intervalle de temps = 1626 ms
I / flutter (11197): intervalle de temps = 965 ms
I / flutter (11197): intervalle de temps = 6024 ms
I / flutter (11197): intervalle de temps = 991 ms
I / flutter (11197): intervalle de temps = 971 ms
I / flutter (11197): intervalle de temps = 6022 ms
I / zygote (11197): collecte partielle du cache de code, code = 62 Ko, données = 51 Ko
I / zygote (11197): après la collecte du cache de code, code = 62 Ko, données = 51 Ko
I / zygote (11197): augmentation de la capacité du cache de code à 256 Ko
I / flutter (11197): intervalle de temps = 7866 ms
I / flutter (11197): intervalle de temps = 940 ms
I / flutter (11197): intervalle de temps = 6091 ms

Géolocalisateur DEUXIÈME TEST: ^ 5.1.4
Lancement de lib / main.dart sur Moto Z2 Play en mode débogage ...
Initialisation de gradle ...
Résolution des dépendances ...
Exécution de la tâche Gradle 'assembleDebug' ...
Construit build / app / sorties / apk / debug / app-debug.apk.
Synchronisation des fichiers avec l'appareil Moto Z2 Play ...
I / flutter (11471): intervalle de temps = 1043 ms
I / flutter (11471): intervalle de temps = 5927 ms
I / flutter (11471): intervalle de temps = 8876 ms
I / flutter (11471): intervalle de temps = 1052 ms
I / flutter (11471): intervalle de temps = 5987 ms
I / flutter (11471): intervalle de temps = 6316 ms
I / flutter (11471): intervalle de temps = 5948 ms
I / zygote (11471): collecte partielle du cache de code, code = 62 Ko, données = 50 Ko
I / zygote (11471): après la collecte du cache de code, code = 62 Ko, données = 50 Ko
I / zygote (11471): augmentation de la capacité du cache de code à 256 Ko
I / flutter (11471): intervalle de temps = 934 ms
I / flutter (11471): intervalle de temps = 6012 ms
I / flutter (11471): intervalle de temps = 954 ms

TROISIEME TEST géolocalisateur: ^ 5.1.4
(SANS attendre dans le géolocalisateur en appuyant sur le bouton 10 fois rapidement
Lancement de lib / main.dart sur Moto Z2 Play en mode débogage ...
Initialisation de gradle ...
Résolution des dépendances ...
Exécution de la tâche Gradle 'assembleDebug' ...
Construit build / app / sorties / apk / debug / app-debug.apk.
Installation de build / app / output / apk / app.apk ...
Synchronisation des fichiers avec l'appareil Moto Z2 Play ...
I / flutter (16122): intervalle de temps = 1020 ms
I / flutter (16122): intervalle de temps = 159 ms
I / flutter (16122): intervalle de temps = 584 ms
I / flutter (16122): intervalle de temps = 544 ms
I / flutter (16122): intervalle de temps = 99 ms
I / flutter (16122): intervalle de temps = 536 ms
I / flutter (16122): intervalle de temps = 82 ms
I / zygote (16122): collecte partielle du cache de code, code = 62 Ko, données = 50 Ko
I / zygote (16122): après la collecte du cache de code, code = 62 Ko, données = 50 Ko
I / zygote (16122): augmentation de la capacité du cache de code à 256 Ko
I / flutter (16122): intervalle de temps = 504 ms
I / flutter (16122): intervalle de temps = 1381 ms
I / flutter (16122): intervalle de temps = 946 ms

Bien que je n'ai pas vérifié moi-même le problème sur Android, comme le titre l'indique, ce problème a été ouvert pour iOS. Néanmoins, vos tests montrent des résultats assez incohérents, et je ne suis pas sûr de ce que fait le troisième test sans attendre l'appel du géolocalisateur. Peut-être que publier le code de votre application clarifierait cela.
Dans tous les cas, je reste pour l'instant avec la version 4.0.3 de la librairie. En fait, j'ai récemment publié mon application sur l'Apple Store. Vous voudrez peut-être le vérifier à
http://apps.apple.com/us/app/apple-store/id1469322424

Voici mon test pour IOS 12.4.4 iPhone 6

Géolocalisateur PREMIER TEST: ^ 4.0.3
Lancement de lib / main.dart sur le PCB de l'iPhone en mode débogage ...
Signature de l'application iOS pour le déploiement de l'appareil à l'aide de l'identité du développeur: «Développeur iPhone: Paulo Breim (Y34R2HBJ59)»
Exécution de l'installation du pod ...
Exécution de la compilation Xcode ...
Construction de Xcode terminée. 23,7s
Installation et lancement ...
Synchronisation des fichiers avec le PCB de l'iPhone de l'appareil ...
scintillement: durée = 230 ms
scintillement: durée = 92 ms
scintillement: durée = 74 ms
flutter: intervalle de temps = 80 ms
flutter: intervalle de temps = 95 ms
flutter: intervalle de temps = 87 ms
flutter: intervalle de temps = 199 ms
scintillement: durée = 58 ms
flutter: intervalle de temps = 73 ms
flutter: intervalle de temps = 70 ms

Géolocalisateur DEUXIÈME TEST: ^ 5.1.4
Lancement de lib / main.dart sur le PCB de l'iPhone en mode débogage ...
Signature de l'application iOS pour le déploiement de l'appareil à l'aide de l'identité du développeur: «Développeur iPhone: Paulo Breim (Y34R2HBJ59)»
Exécution de l'installation du pod ...
Exécution de la compilation Xcode ...
Construction de Xcode terminée. 22,6s
Installation et lancement ...
Synchronisation des fichiers avec le PCB de l'iPhone de l'appareil ...
flutter: intervalle de temps = 12383 ms
flutter: intervalle de temps = 10033 ms
flutter: intervalle de temps = 10027 ms
flutter: intervalle de temps = 10026 ms
flutter: intervalle de temps = 10031 ms
flutter: intervalle de temps = 10029 ms
flutter: intervalle de temps = 10032 ms
flutter: intervalle de temps = 10032 ms
flutter: intervalle de temps = 10028 ms
flutter: intervalle de temps = 10029 ms

babaosoftware, faites-moi savoir si vous avez besoin de plus de tests

@paulobreim merci pour vos efforts. Apparemment, confirme ce que nous disons depuis le début, et les résultats sont cohérents. Les versions de la bibliothèque de géolocalisation, commençant par 5.0.0, ont un temps de réponse inacceptable d'environ 10 secondes pour les appels à getCurrentPosition sur la plate-forme iOS.
Les résultats sur Android sont incohérents, mais certains affichent des temps de réponse de plus de 8 secondes, ce qui est également inquiétant.
@StijnWoerkom Je pense qu'il y a suffisamment de preuves que quelque chose ne va pas avec la mise à niveau de la bibliothèque et qu'il faut un certain effort pour isoler et corriger.

@babaosoftware Merci pour vos efforts. J'ai testé le même problème et suis arrivé à la même conclusion que vous. Nous travaillerons sur ce problème et vous tiendrons au courant lorsqu'il y aura une solution à ce problème.

La même chose se passe ici sur iOS 13.1.3 iPhone XR avec la dernière version de GeoLocator. Il faut entre 8 et 10 secondes pour obtenir la position actuelle

Pour ceux d'entre vous qui ont des problèmes avec la lenteur getPosition sous iOS (par exemple, il faut 10 + s pour obtenir les informations de position), vous pouvez utiliser ce package alternatif comme cela a été dit précédemment dans le fil précédent.

https://github.com/Lyokone/flutterlocation

Il charge les informations de position extrêmement rapidement à la fois sous Android et iOS. (<1s).

J'éprouve le même décalage avec la dernière version. Y a-t-il des problèmes / inconvénients avec le maintien de la version 4.0.3?

Je suis d'accord avec @cielo , j'ai testé ce package et le package de localisation [ lien ] et la différence de vitesse est apparente. Cependant, ce paquet offre plus de fonctionnalités et j'espère que ce bogue de délai sera corrigé (pour moi, il est incohérent).

Je veux juste ajouter que je ressens toujours cette lenteur. Fonctionne bien sur l'émulateur, mais prend plus de 10 secondes sur l'appareil physique Iphone 8 Plus.

effectivement la version 4.0.3 fonctionne très bien. Mon expérience dans les appareils ios physiques, avec la version 5.2.0, a été très retardée dans la localisation de l'emplacement de l'appareil, en l'abaissant à 4.0.3 le problème de résolution

Bonjour, je rencontre ce problème sur Android

mon code est aussi simple que. Position position = await _geoLocator.getCurrentPosition();

J'utilise un Google Pixel 3A

Moi aussi :(
j'utilise ^ 5.1.5
getCurrentPosition () si lent à la fois Android, IOS

Moi aussi
iam en utilisant ^ 5.3.0
IOS 12.4 Iphone 5s.

J'ai le même problème, sur iOS 13.4 beta iPhone XR
Fonctionne bien sur tous les appareils Android OS.

même problème, fonctionne bien sur le périphérique virtuel mais 10 secondes de retard sur le périphérique physique

Rencontrer le même problème sur mon iPhone 7, iOS 13.4

Même problème sur iPhone 7 et IPhone X, IOS 13

Bonjour, même problème dans un vrai appareil iPhone X, iOS 13

Notre temps de démarrage était de plus de 10 secondes à cause de ce problème, revenir à la version 4.0.3 fonctionne

Idem ici, iPhone 5s iOS 12.4.

Aussi dans iPhone 6s iOS 13.4

Je rencontre également ce problème. iPhone 6s iOS 13.4

Même problème sur un appareil physique, iPhone 8 iOS 13.4. getLastKnownLocation fonctionne bien.

+1

Idem ici en utilisant la version de ^5.3.1 Geolocator sur iPhone Xs et iOS 13.3. Je l'ai rétrogradé à 4.0.3 et c'est très rapide! 🚀

Ayant les mêmes résultats lentement, dans le simulateur IOS, cela fonctionne comme un charme, puis j'ai essayé sur un vrai téléphone et cela prend environ 10 secondes sur chaque adresse différente, je me suis promené dans quelques maisons et la première fois est toujours lente, si vous réessayez, cela se charge vite.

J'ai également essayé la version 4.0.3 et fonctionne très bien, mais je vois de nombreuses corrections de 4.0.3 à ^ 5.3.1. un plan pour résoudre ce problème dans la branche principale?

J'ai remarqué que 4.0.3 n'est pas aussi précis que 5.3.1

J'ai également eu ce même problème. Le passage à la version 4.0.3 a résolu le problème pour moi. Cela fonctionnait bien sur le simulateur ios mais prenait un âge sur mon appareil ios physique (iPhone SE 2e génération).

Comment ce problème n'a-t-il pas gagné plus de terrain? Il s'agit sûrement d'un problème de rupture de plugin au niveau de la production. Il ne peut tout simplement pas être utilisé dans un environnement en direct après la v4.0.3.

Reprend ici aussi, iPhone 8.
La première acquisition dure plus de 20 secondes sur le matériel réel sur 5.3.1.
Même matériel, même emplacement, la première acquisition dure environ 2 secondes sur 4.0.3.

Ayant les mêmes résultats lentement, dans le simulateur IOS, cela fonctionne comme un charme, puis j'ai essayé sur un vrai téléphone et cela prend environ 10 secondes sur chaque adresse différente, je me suis promené dans quelques maisons et la première fois est toujours lente, si vous réessayez, cela se charge vite.

Guy j'ai utilisé la version 4.0.3 pour le meilleur résultat dans le simulateur et l'appareil iOS (iPhone 6s - 8)

J'ai le même problème et le passage à 4.0.3 n'a pas été simple car je devrais annuler les versions et j'ai déjà mis à niveau vers Androidx. J'ai utilisé le plugin Flutter Location à la place, beaucoup plus rapidement.

Semblable à ce que disent les autres, je vois des retards d'environ 10 secondes (presque instantanés) sur un appareil iOS physique, mais aucun dans le simulateur. Ce ralentissement a été observé sur plusieurs appareils de mon équipe.

Y a-t-il une intention d'implémenter un correctif pour les versions plus récentes?

pourriez-vous essayer de changer la précision? celui-ci a fonctionné pour moi:
attendre Geolocator (). getCurrentPosition (souhaitéAccuracy: LocationAccuracy.medium)

attendre Geolocator (). getCurrentPosition (souhaitéAccuracy: LocationAccuracy.medium)
travaillé pour moi.

J'étais à 5.3.2 + 2 et j'ai noté que ce plugin était beaucoup plus lent que le plugin de localisation. Sur la base de la recommandation ici, j'ai rétrogradé à 4.0.3 et la vitesse a été beaucoup améliorée.

Également eu le même problème que ci-dessus, lors de l'exécution dans Simulator v11.5 sur mac, le correctif ci-dessous fonctionne également pour la dernière GeoLocation, v ^ 5.3.2 + 2 au moment de l'écriture de ceci.

L'emplacement du périphérique Simulator IOS n'est pas défini par défaut, ce qui provoque l'exception, cela peut être défini en cliquant sur dans la barre de menu supérieure.

Fonctionnalités -> Emplacement -> Sélectionnez une option

a également dû passer à la version 4.03 en raison des performances sur les appareils iOS réels.

Pareil ici, extrêmement lent.

J'ai eu le même problème avec la version 5.3.1.
Il a fallu environ 10 secondes pour obtenir l'emplacement sur presque toutes les versions d'iPhone, iPad.
Changer la précision de l'emplacement (de la meilleure à la moyenne) semble résoudre le problème.

idem ici, testé sur plusieurs iPhones à partir de 6S et plus, version 5.3.2 - prend 5 à 10 secondes pour obtenir l'emplacement

Idem ici, l'iPhone 8 prend 5 secondes pour déterminer l'emplacement

Peut-être que ma solution était cachée dans le texte:
Lorsque j'ai changé le LocationAccuracy (de meilleur à moyen), raccourcissez le délai de moins d'une seconde, et parfois la réponse était instantanée (du moins sur toutes les machines que je l'ai testées).
Veuillez noter que la précision d'emplacement «bonne» n'était pas suffisante.

Il faut jusqu'à 100 secondes (secondes) sur mon iPhoneSE pour obtenir la position actuelle. Parfois, cela prend moins d'une seconde et la prochaine fois, cela prend jusqu'à 100. J'ai également essayé d'utiliser le package Location mais le même problème a persisté. Je ne peux pas revenir à la version 4.0.4 car un autre package que j'utilise dépend des versions supérieures. :(

Nous travaillons dur sur une nouvelle version qui devrait résoudre ces problèmes. Voir également le numéro 430 avec plus de détails sur sa progression.

a récemment eu ce problème en utilisant le géolocalisateur: ^ 5.3.1
pour corriger j'ai mis à niveau vers géolocalisateur: ^ 5.3.2 + 2
ensemble :
compileSdkVersion 28

et finalement fait
mise à niveau de scintillement

cela semble avoir résolu le problème.

attendre Geolocator (). getCurrentPosition (souhaitéAccuracy: LocationAccuracy.medium)
travaillé pour moi.

La classe Geolocator () est désormais obsolète dans la dernière version de ^ 6.0.0, comment suis-je censé utiliser PlaceMarker et placeFromCoordinate

@mannnish , la fonctionnalité de géocodage a été déplacée vers son propre plugin (dédié) appelé géocodage .

@mannnish , la fonctionnalité de géocodage a été déplacée vers son propre plugin (dédié) appelé géocodage .

Merci travaillé

J'ai mis à jour la dernière version, corrigé le problème pour moi 👍👍👍

J'ai mis à jour la dernière version, corrigé le problème pour moi 👍👍👍

En effet, la mise à niveau vers le ^6.1.14 m'a aussi aidé.

J'ai mis à jour la dernière version, corrigé le problème pour moi 👍👍👍

En effet, la mise à niveau vers le ^6.1.14 m'a aussi aidé.

ça ne fonctionne pas pour moi ................. dites les étapes que je dois suivre

J'ai mis à jour la dernière version, corrigé le problème pour moi 👍👍👍

En effet, la mise à niveau vers le ^6.1.14 m'a aussi aidé.

ça ne fonctionne pas pour moi ................. dites les étapes que je dois suivre

hm, je viens de mettre à jour mon pubspec.yaml, peut-être devez-vous aussi supprimer pubpec.lock?

Maintenant c'est encore lent lol (au moins sur le web)

Cette page vous a été utile?
0 / 5 - 0 notes