2

我在我的项目中使用了 google_maps_flutter库。当我热重载地图或从另一个视图返回地图时,它会崩溃并显示消息:

Exception has occurred.
PlatformException (PlatformException(error, java.lang.IllegalStateException: Trying to create an already created platform view, view id: 0
    at io.flutter.plugin.platform.PlatformViewsController$1.createPlatformView(PlatformViewsController.java:85)
    at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:96)

所以我试图处理地图及其控制器。我在这篇文章中有一个要处理的代码片段 所以我添加了这个代码片段:

@override
  void dispose() {
    _disposeController();
    super.dispose();
  }

  Future<void> _disposeController() async{
    final GoogleMapController controller = await _controller.future;
    //controller.dispose();
  }

但取消注释最后一行给出了这个错误:

 The method 'dispose' isn't defined for the class 'GoogleMapController'.
Try correcting the name to the name of an existing method, or defining a method named 'dispose'.

那我该如何处置控制器?

4

1 回答 1

4

我刚刚遇到了同样的麻烦并意识到,他们在这篇中等文章和当前版本之间彻底改变了 GoogleMapController 的实现。

此外,包装上的自述文件可能已过时,我使用了包装本身的示例:

例如 https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/google_maps_flutter/example/lib/animate_camera.dart

他们似乎工作得很好。

更新

似乎他们已经摆脱了 Completer 方式,在他们的示例中,他们不再需要这种构造。

这意味着:直接使用 GoogleMapController 没有完成者:

GoogleMapController mapController;
// instead of 
// GoogleMapController mapController;

只需分配给这个变量onMapCreated:

onMapCreated: (GoogleMapController controller) {
  _controller.complete(controller);
},

然后,您可以使用此控制器而无需等待未来。

mapController.animateCamera(
  CameraUpdate.newLatLng(
    const LatLng(56.1725505, 10.1850512),
  ),
);

我没有看到任何需要处理这个实例,它不再通过 ChangeNotifier() 类实现。

于 2020-01-31T09:53:28.327 回答