Flutter Google Maps,尝试创建已创建的平台视图,视图ID:0

cclgggtu  于 2023-01-14  发布在  Flutter
关注(0)|答案(5)|浏览(123)

第一次谷歌MapFlutter,加载完美,但当热重新启动它,它去平台异常
谷歌Map 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医生-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 -0800
    • Engine 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/Sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.2
    • Java 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.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[✓] Connected device (1 available)
    • vivo 1723 • 49269ad3 • android-arm64 • Android 9 (API 28)

• No issues found!
3npbholx

3npbholx1#

为了解决这个问题,我通过终端执行了以下操作:
1-已将分支更改为主分支:
flutter channel master
2-扑动升级
flutter upgrade
3-已清除代码:
flutter clean

xam8gpfp

xam8gpfp2#

我也遇到了同样的问题,使用flutter clean并没有解决这个问题(flutter版本1.12.13+hotfix 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,
          ),
        )
    );
  }
}
ikfrs5lh

ikfrs5lh3#

此问题是由于在多个GoogleMaps小部件中使用相同的控制器。仅构建一个GoogleMap小部件,并使用GoogleMapController对象进行任何更改。

sgtfey8w

sgtfey8w4#

根据API
在Map完成布局之前,请勿使用此相机更新更改相机(为了使此方法正确确定适当的边界框和缩放级别,Map必须具有大小)。否则将抛出IllegalStateException。
我有同样的问题,经过一些调试,它看起来像每当你hotreload,而Map是在视图中,它会给予出错误。
但是如果在处理贴图之后热重新加载,则可以防止该错误。
换句话说,它的作用是防止贴图的多个示例处于活动状态。
所以我建议在开发过程中,在热加载之前处理Map。
在生产版本中,用户将无法热加载,因此,他们不会遇到平台问题。

相关问题