【问题标题】:How to add a marker to a google map upon tapping button on the parent widget in flutter如何在颤动中点击父小部件上的按钮时向谷歌地图添加标记
【发布时间】:2022-01-19 06:00:02
【问题描述】:

我在 Flutter 中有以下谷歌地图类。

class ExchangeHousesMap extends StatefulWidget {

  final List<Marker> markers;
  final double initialLatitude;
  final double initialLongitude;

  const ExchangeHousesMap({
    Key? key,
    required this.initialLatitude,
    required this.initialLongitude,
    required this.markers,
  }) : super(key: key);

  @override
  State<ExchangeHousesMap> createState() => ExchangeHousesMapState();
}

class ExchangeHousesMapState extends State<ExchangeHousesMap> {
  late final CameraPosition _initialCameraPosition;

  late final Set<Marker> _markers = {};

  final Completer<GoogleMapController> _controller = Completer();

  @override
  void initState() {
    super.initState();

    _initialCameraPosition = CameraPosition(
      target: LatLng(widget.initialLatitude, widget.initialLongitude),
      zoom: 12,
    );
  }

  @override
  Widget build(BuildContext context) {
    return GoogleMap(
      mapType: MapType.normal,
      initialCameraPosition: _initialCameraPosition,
      markers: _markers,
      onMapCreated: (GoogleMapController controller) {
        _controller.complete(controller);

        setState(
          () {
            _markers.addAll(widget.markers);
            _markers.add(
              Marker(
                markerId: const MarkerId('user-marker'),
                position: LatLng(widget.initialLatitude, widget.initialLongitude),
              ),
            );
          },
        );
      },
    );
  }
}  

我将此谷歌地图呈现为父窗口小部件的子窗口。我想在此地图中添加一个新标记在点击父窗口小部件中的按钮时。

我不知道该怎么做。如何在点击父窗口小部件中的该按钮时将标记添加到此地图?

有人可以帮忙吗?

【问题讨论】:

标签: flutter flutter-dependencies flutter-state fluttermap flutter-future


【解决方案1】:
      GoogleMap(
          initialCameraPosition: _initialCameraPosition,
          onMapCreated: (controller) => _googleMapController = controller,
          zoomControlsEnabled: false,
          myLocationButtonEnabled: false,
          markers: {
            if (_origin != null) _origin!,
            if (_destination != null) _destination!,
          },
          onLongPress: _addMarker,  //for adding marker on long press
        ),

用于在长按时添加标记

  void _addMarker(LatLng pos) async {
    if (_origin == null || (_origin != null && _destination != null)) {
      setState(() {
        _origin = Marker(
            markerId: const MarkerId("origin"),
            infoWindow: const InfoWindow(title: "Origin"),
            icon: BitmapDescriptor.defaultMarkerWithHue(
                BitmapDescriptor.hueGreen),
            position: pos);

        //Reset destination and info
        _destination = null;
        _info = null;
      });
    } else {
      setState(() {
        _destination = Marker(
            markerId: const MarkerId("destination"),
            infoWindow: const InfoWindow(title: "Destination"),
            icon:
                BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueRed),
            position: pos);
      });

      //Get directions
      final directions = await DirectionsRepository()
          .getDirections(origin: _origin!.position, destination: pos);
      setState(() {
        _info = directions;
      });
    }
  }

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2016-10-23
    • 2020-07-19
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2019-09-23
    相关资源
    最近更新 更多