Google Haritalar'ın Çırpınması, Önceden oluşturulmuş bir platform görünümü oluşturmaya çalışırken, görünüm kimliği: 0


17

İlk kez google haritaları çarpışıyor, mükemmel yükleniyor ancak sıcak yeniden başlatıldığında platform istisnasına gidiyor

google_maps_flutter: ^ 0.5.21 + 15

Github [google_maps_flutter] Önceden oluşturulmuş bir platform görünümü oluşturmaya çalışıyor # 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

Çırpınan doktor -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 -0800Engine 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/SdkAndroid NDK location not configured (optional; useful for native profiling support)Platform android-29, build-tools 29.0.2Java 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.1Dart plugin version 191.8593Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[] Connected device (1 available)
    • vivo 172349269ad3 • android-arm64 • Android 9 (API 28)No issues found!

Yanıtlar:


7

Bu sorunu çözmek için aşağıdakileri terminal aracılığıyla yaptım:

1- Şubeyi Ana şubeye çevirdi:

flutter channel master

2- Yükseltilmiş Çarpıntı

flutter upgrade

3- Kodu temizleyin:

flutter clean


1
evet, ben aynı yaptım ve sıcak yeniden yükleme şimdi çalışıyor, ana dalı olarak değişti, çarpıntı ve çarpıntı temiz yükseltme, sonra uygulama çalışıyor
Lav Kushwaha

1
Ana kanala geçmek ve çarpıntıyı yükseltmek sorunu çözecektir. Sizin için +1 teşekkürler.
Vinoth Vino

1
Master şubeye geçmek kötü bir fikir. Ana dal en çok dengesizdir. Daha iyi bir çözüm arayan herkes bu soru için başka bir cevap düşünmelidir. github.com/flutter/flutter/wiki/Flutter-build-release-channels
fotonmoton

1
flutter cleanbirisi düzenleyebilir eğer küçük harfle olmalıdır
Dimitar

1
@Dimitar Büyük harf olduğunu fark etmedim, sadece düzenledim, bize bildirdiğiniz için teşekkürler,
Yousef Gamal

7

Ben de aynı sorunu vardı ve kullanarak flutter cleanbenim için çözmedi ( çarpıntı sürüm 1.12.13 + düzeltme 8 )

Ama sonra, widget'a (durumuna değil) benzersiz bir anahtar eklemek sorunu benim için çözdü.

bunu göstermek için minimum çalışma kodu örneği.

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,
          ),
        )
    );
  }
}

Teşekkürler Eyad, Anahtar Ekleme sorunu çözmeye yardımcı oldu
Charden Daxicen

Flutter 1.17'nin kararlı hale gelmesine kadar, bunun üretimdeki bir proje için doğru cevap olduğunu düşünüyorum
Pablo Insua

Neden anahtar kullanmıyoruz diye açıklayabilir misiniz GoogleMap()?
Shahzad Akram

4

API'ya göre ,

Harita yerleşime girmeden kamerayı bu kamera güncellemesiyle değiştirmeyin (bu yöntemin uygun sınırlama kutusunu ve yakınlaştırma seviyesini doğru bir şekilde belirlemesi için haritanın boyutu olmalıdır). Aksi takdirde, bir IllegalStateException istisnası atılır.

Ben aynı sorunu vardı ve bazı hata ayıklama sonra, harita görünümünde hotreload her zaman gibi görünüyor, bu hata verecektir.

Ancak haritayı attıktan sonra sıcak yeniden yüklerseniz hatayı önleyebilirsiniz.

Başka bir deyişle, birden fazla harita örneğinin aktif olmasını önlemek mümkündür.

Bu nedenle, haritayı geliştirme sırasında sıcak yeniden yüklemeden önce atmanızı öneririm.

Bir üretim sürümünde, kullanıcılar sıcak yeniden yükleyemezler, platform sorunuyla karşılaşmazlar.


3

Sorun, aynı denetleyiciyi birden çok GoogleMaps widget'ında kullanmasından kaynaklanıyor. Yalnızca bir GoogleMap widget'ı oluşturun ve değişiklik yapmak için GoogleMapController nesnesini kullanın.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.