【问题标题】:How to dispose Flutter google map's controller如何处理 Flutter 谷歌地图控制器
【发布时间】:2020-05-12 12:57:27
【问题描述】:

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

所以我试图处置地图及其控制器。我有一个代码 sn-p 来处理in this article 所以我添加了这个代码sn-p:

@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'.

那么我该如何处置控制器呢?

【问题讨论】:

    标签: flutter google-maps-flutter


    【解决方案1】:

    我刚刚遇到了同样的麻烦并意识到,他们在这篇中型文章和当前版本之间彻底改变了 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() 类实现。

    【讨论】:

    • 虽然外部链接是支持您的答案的良好参考,但也请在您的答案正文中包含有效的 sn-p。这样,如果外部链接损坏,您的答案在将来仍然有用。
    • 但这不符合我的目的。因为平台异常发生了
    • 这个控制器的实现根本没有处理。我根本不知道那里是否需要处理。
    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多