mirrored_repositories/awesome-flutter/examples/plugins/packages/google_maps_flutter/google_maps_flutter_web/lib
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

part of google_maps_flutter_web;

/// The `CircleController` class wraps a [gmaps.Circle] and its `onTap` behavior.
class CircleController {
  gmaps.Circle? _circle;

  final bool _consumeTapEvents;

  /// Creates a `CircleController`, which wraps a [gmaps.Circle] object and its `onTap` behavior.
  CircleController({
    required gmaps.Circle circle,
    bool consumeTapEvents = false,
    ui.VoidCallback? onTap,
  })  : _circle = circle,
        _consumeTapEvents = consumeTapEvents {
    if (onTap != null) {
      circle.onClick.listen((_) {
        onTap.call();
      });
    }
  }

  /// Returns the wrapped [gmaps.Circle]. Only used for testing.
  @visibleForTesting
  gmaps.Circle? get circle => _circle;

  /// Returns `true` if this Controller will use its own `onTap` handler to consume events.
  bool get consumeTapEvents => _consumeTapEvents;

  /// Updates the options of the wrapped [gmaps.Circle] object.
  ///
  /// This cannot be called after [remove].
  void update(gmaps.CircleOptions options) {
    assert(_circle != null, 'Cannot `update` Circle after calling `remove`.');
    _circle!.options = options;
  }

  /// Disposes of the currently wrapped [gmaps.Circle].
  void remove() {
    if (_circle != null) {
      _circle!.visible = false;
      _circle!.radius = 0;
      _circle!.map = null;
      _circle = null;
    }
  }
}
