फ़्लटर Google मानचित्र, पहले से निर्मित प्लेटफ़ॉर्म दृश्य बनाने की कोशिश कर रहा है, आईडी देखें: 0


17

पहली बार गूगल मैप्स फड़फड़ाता है, सही लोड करता है लेकिन जब हॉट इसे रीस्टार्ट करता है, तो यह प्लेटफॉर्म अपवाद हो जाता है

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/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!

जवाबों:


7

इस समस्या को हल करने के लिए मैंने टर्मिनल के माध्यम से निम्नलिखित किया:

1- शाखा को मास्टर शाखा में बदला:

flutter channel master

2- अपग्रेडेड स्पंदन

flutter upgrade

3- कोड साफ किया:

flutter clean


1
हाँ, मैंने वही किया है और हॉट रिलोड अब काम कर रहा है, मास्टर शाखा में बदल गया है, स्पंदन और स्पंदन को अपग्रेड करें, फिर ऐप काम कर रहा है
लव कुशवाहा

1
मास्टर चैनल पर स्विच करना और स्पंदन को अपग्रेड करना समस्या का समाधान करेगा। धन्यवाद +1 आपके लिए।
विनोथ वीनो

1
मास्टर ब्रांच पर स्विच करना एक बुरा विचार है। सभी के बीच मास्टर शाखा सबसे अस्थिर है। जो कोई भी बेहतर समाधान की तलाश कर रहा है, उसे इस प्रश्न के अन्य उत्तरों पर विचार करना चाहिए। github.com/flutter/flutter/wiki/Flutter-build-release-channels
fotonmoton

1
यह flutter cleanनिचले मामले के साथ होना चाहिए अगर कोई इसे संपादित कर सकता है
दिमितार

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


१.१ the स्थिर के रिलीज होने तक, मुझे लगता है कि यह उत्पादन में एक परियोजना के लिए सही उत्तर है
पाब्लो इंसु

क्या आप यह बता सकते हैं कि हम कुंजी का उपयोग क्यों नहीं करते हैं GoogleMap()?
शहजाद अकरम

4

के मुताबिक एपीआई के ,

इस कैमरा अपडेट के साथ कैमरा को तब तक न बदलें जब तक कि मैप में लेआउट न आ जाए (इस विधि के लिए उचित बाउंडिंग बॉक्स और ज़ूम स्तर को सही ढंग से निर्धारित करने के लिए, मैप का आकार होना चाहिए)। अन्यथा एक IllegalStateException को फेंक दिया जाएगा।

मेरे पास एक ही मुद्दा था और कुछ डिबगिंग के बाद, ऐसा लगता है कि जब भी आप हॉटरेलोड करते हैं, तो नक्शा देखने के दौरान, यह त्रुटि देगा।

लेकिन आप त्रुटि को रोक सकते हैं यदि आप मानचित्र को निपटाने के बाद पुनः लोड करते हैं।

दूसरे शब्दों में, यह मानचित्रों के कई उदाहरणों को सक्रिय होने से रोकने के लिए है।

इसलिए मैं विकास में रहते हुए गर्म पुनः लोड करने से पहले मानचित्र को निपटाने का सुझाव दूंगा।

उत्पादन संस्करण में, उपयोगकर्ता इस प्रकार पुनः लोड नहीं कर पाएंगे, वे प्लेटफ़ॉर्म समस्या का सामना नहीं करेंगे।


3

समस्या कई GoogleMaps विजेट में एक ही नियंत्रक का उपयोग करने के कारण है। कोई भी परिवर्तन करने के लिए केवल एक GoogleMap विजेट बनाएं और GoogleMapController ऑब्जेक्ट का उपयोग करें।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.