Flutter Google Maps, Mencoba membuat tampilan platform yang sudah dibuat, lihat id: 0

17

Untuk pertama kalinya Google Maps bergetar, banyak yang sempurna tetapi ketika panas me-restart itu, itu akan menjadi pengecualian platform

google_maps_flutter: ^ 0.5.21 + 15

Github [google_maps_flutter] Mencoba membuat tampilan platform yang sudah dibuat # 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

Dokter bergetar -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!
Lav Kushwaha
sumber

Jawaban:

7

Untuk mengatasi masalah ini, saya melakukan hal berikut melalui terminal:

1- Mengubah cabang menjadi cabang Master:

flutter channel master

2- Flutter yang Ditingkatkan

flutter upgrade

3- Membersihkan kode:

flutter clean

Yousef Gamal
sumber
1
ya, saya telah melakukan hal yang sama dan hot reload sekarang berfungsi, diubah menjadi master branch, upgrade flutter dan flutter clean, kemudian aplikasi berfungsi
Lav Kushwaha
1
Beralih ke saluran induk dan meningkatkan flutter akan menyelesaikan masalah. Terima kasih +1 untuk Anda.
Vinoth Vino
1
Itu ide yang buruk untuk beralih ke cabang utama. Cabang utama paling tidak stabil di antara semuanya. Siapa pun yang mencari solusi yang lebih baik harus mempertimbangkan jawaban lain untuk pertanyaan ini. github.com/flutter/flutter/wiki/Flutter-build-release-channels
fotonmoton
1
harus flutter cleandengan huruf kecil jika seseorang dapat mengeditnya
Dimitar
1
@Dimitar Saya tidak menyadari bahwa ini adalah huruf besar, saya baru saja mengeditnya, terima kasih telah memberi tahu kami,
Yousef Gamal
7

Saya juga memiliki masalah yang sama dan menggunakan flutter cleantidak menyelesaikannya untuk saya ( flutter versi 1.12.13 + hotfix 8 )

Tapi kemudian, menambahkan kunci unik ke widget (bukan ke keadaannya) memecahkan masalah bagi saya.

contoh kode kerja minimum untuk menunjukkan ini.

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,
          ),
        )
    );
  }
}
Eyad
sumber
Terima kasih Eyad, Menambahkan Tombol membantu menyelesaikan masalah
Charden Daxicen
Sampai rilis stabil Flutter 1.17, saya pikir ini adalah jawaban yang benar untuk proyek dalam produksi
Pablo Insua
Bisakah Anda jelaskan mengapa kita tidak menggunakan kunci GoogleMap()?
Shahzad Akram
4

Menurut API ,

Jangan mengubah kamera dengan pembaruan kamera ini sampai peta telah mengalami tata letak (agar metode ini menentukan dengan benar kotak pembatas yang sesuai dan tingkat zoom, peta harus memiliki ukuran). Kalau tidak, IllegalStateException akan dilempar.

Saya memiliki masalah yang sama dan setelah beberapa debug, sepertinya setiap kali Anda memuat ulang saat peta sedang dilihat, itu akan memberikan kesalahan.

Tetapi Anda dapat mencegah kesalahan jika Anda melakukan pemuatan ulang setelah membuang peta.

Dengan kata lain, itu ada untuk mencegah beberapa instance peta menjadi aktif.

Jadi saya akan menyarankan untuk membuang peta sebelum memuat ulang panas saat dalam pengembangan.

Dalam versi produksi, pengguna tidak akan dapat melakukan hot reload sehingga, mereka tidak akan menemui masalah platform.

Steve Kim
sumber
3

Masalahnya adalah karena menggunakan pengontrol yang sama di beberapa widget GoogleMaps. Buat hanya satu widget GoogleMap dan gunakan objek GoogleMapController untuk membuat perubahan.

Nihal Ismail
sumber