buildViewWithConfiguration method

  1. @override
Widget buildViewWithConfiguration(
  1. int creationId,
  2. PlatformViewCreatedCallback onPlatformViewCreated, {
  3. required MapWidgetConfiguration widgetConfiguration,
  4. MapObjects mapObjects = const MapObjects(),
  5. MapConfiguration mapConfiguration = const MapConfiguration(),
})

Returns a widget displaying the map view.

Implementation

@override
Widget buildViewWithConfiguration(
  int creationId,
  PlatformViewCreatedCallback onPlatformViewCreated, {
  required MapWidgetConfiguration widgetConfiguration,
  MapObjects mapObjects = const MapObjects(),
  MapConfiguration mapConfiguration = const MapConfiguration(),
}) {
  // Bail fast if we've already rendered this map ID...
  if (_mapById[creationId]?.widget != null) {
    return _mapById[creationId]!.widget!;
  }

  final StreamController<MapEvent<Object?>> controller =
      StreamController<MapEvent<Object?>>.broadcast();

  final GoogleMapController mapController = GoogleMapController(
    mapId: creationId,
    streamController: controller,
    widgetConfiguration: widgetConfiguration,
    mapObjects: mapObjects,
    mapConfiguration: mapConfiguration,
  )..init(); // Initialize the controller

  _mapById[creationId] = mapController;

  mapController.events
      .whereType<WebMapReadyEvent>()
      .first
      .then((WebMapReadyEvent event) {
    assert(creationId == event.mapId,
        'Received WebMapReadyEvent for the wrong map');
    // Notify the plugin now that there's a fully initialized controller.
    onPlatformViewCreated.call(event.mapId);
  });

  assert(mapController.widget != null,
      'The widget of a GoogleMapController cannot be null before calling dispose on it.');

  return mapController.widget!;
}