All existing annotations are re-sent and redrawn on every update (causes flicker/lag)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 84/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Ambito
- mobile, performance
Direzione di ricerca
Leggi lib/src/annotation_updates.dart e verifica come vengono confrontate le annotazioni precedenti e attuali durante la creazione di annotationsToChange. Conferma il comportamento consultando l’implementazione dell’uguaglianza delle annotazioni, poi aggiungi o aggiorna test mirati per le annotazioni invariate. Il lavoro è completato quando le annotazioni invariate sono escluse dagli aggiornamenti, mentre quelle modificate continuano a raggiungere il lato nativo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
Every time AppleMap.annotations changes, every annotation that is still on the map is sent to the native side as "changed", even if nothing about it changed. On iOS each of them is then rebuilt and redrawn (with a 0.32 s animation), so with a few dozen annotations the map visibly flickers and stutters on every update. This is probably the cause of #57.
Cause
lib/src/annotation_updates.dartbuildsannotationsToChangefrom the intersection of previous and current ids without comparing them:
(final Set<Annotation> _annotationsToChange = currentAnnotationIds .intersection(prevAnnotationIds) .map(idToCurrentAnnotation) .toSet();google_maps_flutterfilters these with.where(hasChanged).)- On iOS,
annotationsToChangecreates a newFlutterAnnotationfrom the dictionary (decoding the icon bytes into a newUIImage) and compares it with!=.AnnotationIcon ==comparesimageby reference, so it is always "different" andupdateAnnotationruns for every annotation.
Fix (one line, Dart side). Annotation == already ignores onTap, so unchanged annotations compare equal if the app reuses the same BitmapDescriptor instance:
final Set<Annotation> _annotationsToChange = currentAnnotationIds
.intersection(prevAnnotationIds)
.where((AnnotationId id) => previousAnnotations[id] != currentAnnotations[id])
.map(idToCurrentAnnotation)
.toSet();
With this change, in our app (≈ 50 annotations re-grouped on every zoom/pan) the flicker on a real iPhone 16 Pro is gone.
Version: apple_maps_flutter 1.4.0, iOS 27, Flutter 3.32.1.
Happy to open a PR with this change.
- Lingua principale
- Dart
- Stelle
- 84
- Fork
- 120
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di fluttercommunity/apple_maps_flutter
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 66/100
fluttercommunity/apple_maps_flutter#85 · 8 commenti · 5 reazioni ·
-
Crash in MKPuckAccuracyLayer _updateColors due to CFStringGetLength (iOS)Forse di nuovo libera @LuisThein l’ha presa 275 giorni fa e non c’è nessuna pull request aperta. Apertabug
fluttercommunity/apple_maps_flutter#81 · 1 assegnatario ·
-
incorrect zoom when turning the camera programmatically on the mapForse di nuovo libera @LuisThein l’ha presa 338 giorni fa e non c’è nessuna pull request aperta. Apertabug
fluttercommunity/apple_maps_flutter#79 · 1 assegnatario ·
-
Apple maps consumes more CPU and memory than google mapsForse di nuovo libera @LuisThein l’ha presa 441 giorni fa e non c’è nessuna pull request aperta. Apertabug
fluttercommunity/apple_maps_flutter#78 · 1 assegnatario ·
-
Add option to manually set light/dark appearance (overrideUserInterfaceStyle)Forse già presa @LuisThein l’ha presa 500 giorni fa. Apertaenhancement
fluttercommunity/apple_maps_flutter#77 · 2 commenti · 1 reazione · 1 assegnatario ·
Tutte le issue di fluttercommunity/apple_maps_flutter
Issue simili
-
type:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 2 giorni
-
Standalone dash flashes as its own RSVP step (e.g. Russian dialogue)Forse già presa @bezig01 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
daniel-pimenta-cc/ledor#53 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 2 giorni
-
Iteration CounterApertaenhancement firebase
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
brysonddelozier/scribbles#24 ·