กระพือ Google แผนที่พยายามสร้างมุมมองแพลตฟอร์มที่สร้างขึ้นแล้วดู id: 0


17

สำหรับครั้งแรกที่ Google Maps กระพือให้โหลดที่สมบูรณ์แบบ แต่เมื่อเริ่มต้นใหม่ร้อนมันจะไปที่ข้อยกเว้นแพลตฟอร์ม

google_maps_flutter: ^ 0.5.21 + 15

Github [google_maps_flutter] พยายามสร้างมุมมองแพลตฟอร์มที่สร้างขึ้นแล้ว # 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

กระพือหมอ -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/flutterFramework revision 27321ebbad (2 weeks ago), 2019-12-10 18:15:01 -0800Engine revision 2994f7e1e6Dart 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/javaJava 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-studioFlutter 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!

คำตอบ:


7

เพื่อแก้ปัญหานี้ฉันทำสิ่งต่อไปนี้ผ่านทางเทอร์มินัล:

1- เปลี่ยนสาขาเป็นสาขาหลัก:

flutter channel master

2- อัพเกรด Flutter

flutter upgrade

3- ทำความสะอาดรหัส:

flutter clean


1
ใช่ฉันได้ทำแบบเดิมแล้วและตอนนี้โหลดใหม่ร้อนใช้งานได้เปลี่ยนเป็นสาขาหลักอัปเกรดกระพือและกระพือให้สะอาดจากนั้นแอปก็ใช้งานได้
Lav Kushwaha

1
การเปลี่ยนเป็นช่องสัญญาณหลักและการอัพเกรดการกระพือจะแก้ปัญหาได้ ขอบคุณ +1 สำหรับคุณ
Vinoth Vino

1
เป็นความคิดที่ดีที่จะเปลี่ยนเป็นสาขาหลัก สาขามาสเตอร์ไม่แน่นอนในหมู่ทั้งหมด ใครที่กำลังมองหาทางออกที่ดีกว่าควรพิจารณาคำตอบอื่นสำหรับคำถามนี้ github.com/flutter/flutter/wiki/Flutter-build-release-channels
fotonmoton

1
ควรเป็นflutter cleanตัวพิมพ์เล็กหากมีใครสามารถแก้ไขได้
Dimitar

1
@Dimitar ฉันไม่ได้สังเกตว่ามันเป็นตัวพิมพ์ใหญ่ฉันเพิ่งแก้ไขมันขอบคุณที่แจ้งให้เราทราบ
Yousef Gamal

7

ฉันยังมีปัญหาเดียวกันและการใช้flutter cleanไม่ได้แก้ปัญหาให้ฉัน ( เวอร์ชั่นกระพือ 1.12.13 + โปรแกรมแก้ไขด่วน 8 )

แต่จากนั้นการเพิ่มคีย์เฉพาะให้กับวิดเจ็ต (ไม่ใช่สถานะ) แก้ไขปัญหาให้ฉัน

ตัวอย่างรหัสการทำงานขั้นต่ำเพื่อสาธิตสิ่งนี้

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 การเพิ่มคีย์ช่วยแก้ปัญหาได้
Charden Daxicen

จนกระทั่งการปล่อย Flutter 1.17 เสถียรฉันคิดว่านี่เป็นคำตอบที่ถูกต้องสำหรับโครงการในการผลิต
Pablo Insua

คุณสามารถอธิบายรายละเอียดว่าทำไมเราไม่ใช้คีย์ในGoogleMap()?
Shahzad Akram

4

ตามที่API ,

อย่าเปลี่ยนกล้องด้วยการอัปเดตกล้องนี้จนกว่าแผนที่จะได้รับการจัดวาง (เพื่อให้วิธีการนี้กำหนดกล่องขอบเขตและระดับการซูมที่ถูกต้องแผนที่จะต้องมีขนาด) มิฉะนั้นจะมีการโยน IllegalStateException

ฉันมีปัญหาเดียวกันและหลังจากแก้ไขข้อบกพร่องบางอย่างดูเหมือนว่าเมื่อใดก็ตามที่คุณโหลดใหม่ในขณะที่แผนที่อยู่ในมุมมองมันจะให้ข้อผิดพลาด

แต่คุณสามารถป้องกันข้อผิดพลาดได้หากคุณโหลดซ้ำร้อนหลังจากทิ้งแผนที่

กล่าวอีกนัยหนึ่งคือมีการป้องกันไม่ให้แผนที่ใช้งานได้หลายอินสแตนซ์

ดังนั้นฉันขอแนะนำให้กำจัดแผนที่ก่อนที่จะโหลดซ้ำร้อนขณะที่กำลังพัฒนา

ในเวอร์ชันการผลิตผู้ใช้จะไม่สามารถโหลดซ้ำได้อย่างร้อนแรงผู้ใช้จะไม่พบปัญหาแพลตฟอร์ม


3

ปัญหานี้เกิดจากการใช้ตัวควบคุมเดียวกันในวิดเจ็ต GoogleMaps หลายรายการ สร้างวิดเจ็ต GoogleMap เพียงหนึ่งรายการและใช้วัตถุ GoogleMapController เพื่อทำการเปลี่ยนแปลงใด ๆ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.