Промайструйте Карти Google, намагаючись створити вже створений перегляд платформи, перегляньте id: 0


17

Уперше карти Google гуркіт, завантажується ідеально, але коли гаряче перезапустити його, він переходить на виняток із платформи

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

Лепеха лікар -в

[] 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 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з нижнього регістру, якщо хтось може його відредагувати
Димитар

1
@Dimitar Я не помітив, що це верхній регістр, я щойно його відредагував, дякую, що повідомив нам про це,
Юсеф Гамаль

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

Дякую Ейяду, Додавання ключів допомогло вирішити проблему
Чарден Даксісен

До виходу стабільного Flutter 1.17, я вважаю, що це правильна відповідь для проекту у виробництві
Pablo Insua

Чи можете ви пояснити, чому б нам не використати ключ GoogleMap()?
Шахзад Акрам

4

Згідно з API ,

Не змінюйте камеру з цим оновленням камери, поки карта не зазнала макета (для того, щоб цей метод правильно визначив відповідний обмежувальний вікно та рівень масштабування, карта повинна мати розмір). Інакше буде викинуто IllegalStateException.

У мене була та сама проблема, і після деякої налагодження, схоже, щоразу, коли ви завантажуєте під час завантаження, поки карта переглядається, це дасть помилку.

Але ви можете запобігти помилці, якщо ви перезавантажилися після викриття карти.

Іншими словами, саме там можна запобігти активності декількох примірників карт.

Тому я б запропонував утилізувати карту перед гарячим перезавантаженням під час розробки.

У виробничій версії користувачі не зможуть таким чином перезавантажити, вони не зіткнуться з проблемою платформи.


3

Проблема пов’язана з використанням одного і того ж контролера у кількох віджетах GoogleMaps. Створіть лише один віджет GoogleMap та використовуйте об’єкт GoogleMapController для внесення будь-яких змін.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.