web-dev-qa-db-fra.com

Flutter Google Map est vide après avoir repris de l'arrière-plan

Je ressens le problème suivant: mon application flutter utilise un googlemap. La carte se charge bien d'abord. Cependant, si je mets l'application à l'arrière-plan et que je reprends un moment plus tard, la carte reste vide. Le logo Google montre toujours, comme cela se produit lorsque la touche API n'est pas spécifiée. Ma superposition de polygone ne s'affiche pas non plus.

Le comportement n'est pas repudutable de manière fiable. Parfois, la carte charge bien une fois que l'application avait été en arrière-plan pendant des heures, parfois la carte est vide après minutes. Jusqu'à présent, je n'ai vu que ce comportement sur Android.

Il n'y a pas de sorties de journal spécifiques indiquant une erreur.

Des idées comment réparer/travailler autour de cela?

J'ai déposé un problème avec une capture d'écran ici: https://github.com/flutter/flutter/issues/40284

Editer 1: J'ai pu reproduire cela avec un googLEMAP en tant que widget root et sans aucune superposition de polygone/caractéristique. En outre, j'ai trouvé que zoomer énormément à un moment de "réanimaux" la carte (soudainement, la carte devient visible à nouveau). Est-ce peut-être un problème connu avec le sous-jacent Android Google Maps SDK?

Editer 2: J'ai trouvé que la carte réagit toujours (par exemple, les auditeurs Tap/Gesttures sont toujours déclenchent). En outre, la carte n'est pas vraiment vide, cela devient simplement translucide, alors l'écran affiche le widget qui est derrière la carte.

10
jbxbergdev

Pas une solution au problème de base, mais j'ai pu contourner ce bug en créant une fourchette du projet de plugins et en modifiant GooglemapController.java comme suit:

@Override
  public void onActivityResumed(Activity activity) {
    if (disposed || activity.hashCode() != registrarActivityHashCode) {
      return;
    }
    mapView.onResume();
    // Workaround for https://github.com/flutter/flutter/issues/40284
    // This apparently forces a re-render of the map.
    if (googleMap != null) {
      googleMap.setMapType(googleMap.getMapType());
    }
  }

Maintenant, à chaque événement de CV, la carte sera re-rendue.

2
jbxbergdev

Une autre solution temporaire ne nécessitant pas de fourchette des plugins, de la construction, etc.
[.____] Ajouter un didChangeAppLifecycleState implémenté via WidgetsBindingObserver à votre widget et faites reconstruire le widget Googlemap avec un changement d'état.

0
MattyBoy