Flutter Google Maps, 이미 생성 된 플랫폼보기를 만들려고 시도하면 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

플러터 닥터 -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
예, 나는 똑같이하고 핫 리로드는 이제 작동하고, 마스터 브랜치로 변경하고, 플러터와 플러터를 깨끗하게 업그레이드 한 다음 앱이 작동합니다.
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.