web-dev-qa-db-fra.com

Flutter Google Maps, Essayer de créer une vue de plate-forme déjà créée, id de vue: 0

Pour la première fois, Google Maps flutter, se charge parfaitement, mais lors d'un redémarrage à chaud, il passe à l'exception de la plate-forme

google_maps_flutter: ^ 0.5.21 + 15

Github [google_maps_flutter] Essayer de créer une vue de plateforme déjà créée # 45695

[ERROR:flutter/lib/ui/ui_Dart_state.cc(157)] Unhandled Exception: PlatformException(error, Java.lang.IllegalStateException: Trying to create an already created platform view, view id: 0

Docteur Flutter -v

[✓] Flutter (Channel stable, v1.12.13+hotfix.5, on Linux, locale en_IN)
    • Flutter version 1.12.13+hotfix.5 at /home/asus/Documents/Flutter_SDK/flutter
    • Framework revision 27321ebbad (2 weeks ago), 2019-12-10 18:15:01 -0800
    • Engine revision 2994f7e1e6
    • Dart version 2.7.0


[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at /home/asus/Android/Sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform Android-29, build-tools 29.0.2
    • Java binary at: /snap/Android-studio/81/Android-studio/jre/bin/Java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    • All Android licenses accepted.

[✓] Android Studio (version 3.5)
    • Android Studio at /snap/Android-studio/81/Android-studio
    • Flutter plugin version 42.1.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[✓] Connected device (1 available)
    • vivo 1723 • 49269ad3 • Android-arm64 • Android 9 (API 28)

• No issues found!
16
Lav Kushwaha

Pour résoudre ce problème, j'ai fait ce qui suit via le terminal:

1- Changement de branche en branche Master:

flutter channel master

2- Flutter amélioré

flutter upgrade

3- Nettoyé le code:

Flutter clean

5
Yousef Gamal

Selon API ,

Ne changez pas la caméra avec cette mise à jour de la caméra tant que la carte n'a pas été mise en page (pour que cette méthode détermine correctement le cadre de sélection et le niveau de zoom appropriés, la carte doit avoir une taille). Sinon, une exception IllegalStateException sera levée.

J'ai eu le même problème et après un débogage, il semble que chaque fois que vous rechargez à chaud pendant que la carte est en vue, cela donnera l'erreur.

Mais vous pouvez éviter l'erreur si vous rechargez à chaud après avoir supprimé la carte.

En d'autres termes, il est là pour empêcher l'activation de plusieurs instances de cartes.

Je suggère donc de disposer de la carte avant le rechargement à chaud pendant le développement.

Dans une version de production, les utilisateurs ne pourront pas recharger à chaud ainsi, ils ne rencontreront pas le problème de plate-forme.

4
Steve Kim

J'ai également eu le même problème et en utilisant flutter clean ne l'a pas résolu pour moi ( flutter version 1.12.13 + hotfix 8 )

Mais alors, en ajoutant une clé unique au widget (pas à son état) a résolu le problème pour moi.

exemple de code de travail minimum pour le démontrer.

import 'package:flutter/material.Dart';
import 'package:google_maps_flutter/google_maps_flutter.Dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Map not crashing demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LocationScreen(),
    );
  }
}

class LocationScreen extends StatefulWidget 
{
  final Key _mapKey = UniqueKey();
  @override
  _LocationScreenState createState() => _LocationScreenState();
}

class _LocationScreenState extends State<LocationScreen> 
{
  @override
  Widget build(BuildContext context) 
  {
    return Scaffold(
      appBar: AppBar(title: const Text('Map not crashing demo')),
      body: TheMap(key:widget._mapKey)
    );
  }
}

class TheMap extends StatefulWidget 
{
  ///key is required, otherwise map crashes on hot reload
  TheMap({ @required Key key})
  :
  super(key:key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<TheMap> 
{
  GoogleMapController _mapController ;

  void _onMapCreated(GoogleMapController controller) {
    _mapController = controller;
  }
  @override
  Widget build(BuildContext context) 
  {
    return Scaffold(
      //also this avoids it crashing/breaking when the keyboard is up
      resizeToAvoidBottomInset: false,
      body: GoogleMap(
          onMapCreated: _onMapCreated,
          initialCameraPosition: CameraPosition(
            target: const LatLng(30.0925973,31.3219982),
            zoom: 11.0,
          ),
        )
    );
  }
}
4
Eyad

Le problème est dû à l'utilisation du même contrôleur dans plusieurs widgets GoogleMaps. Créez un seul widget GoogleMap et utilisez l'objet GoogleMapController pour apporter des modifications.

2
Nihal Ismail

Le problème est référencé ici: https://github.com/flutter/flutter/issues/45695

2
tduchateau