如何处置小蝶谷歌地图的控制器



我在项目中使用了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'.

那么如何处置控制器呢?

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

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

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

它们似乎工作得很好。

更新

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

这意味着: 直接使用 GoogleMapController 而无需完成器:

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

只需在 MapCreated上分配给此变量:

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

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

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

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

最新更新