Как избавиться от контроллера Flutter google map - PullRequest
1 голос
/ 27 января 2020

Я использовал библиотеку 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'.

тогда как я могу избавиться от контроллера?

1 Ответ

1 голос
/ 31 января 2020

Я только что столкнулся с той же проблемой и понял, что они резко изменили реализацию GoogleMapController между этой средней статьей и текущей версией.

Кроме того, readme на пакете может быть устаревшим, я использовал примеры из Сам пакет:

например, https://github.com/flutter/plugins/blob/master/packages/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 ().

...