未为类“ GoogleMapController”定义方法“ removeMarker”和“ addMarker”

时间:2019-06-11 04:27:21

标签: google-maps flutter location marker

我正在添加removeMarker和addMarker,但它显示了这一点- 未为类“ GoogleMapController”定义方法“ addMarker”。 尝试将名称更正为现有方法的名称,或定义一个名为“ addMarker”的方法。dart(undefined_method)

未为类“ _GoogleMapsDemoState”定义方法“ MarkerOptions”。 尝试将名称更正为现有方法的名称,或定义一个名为“ MarkerOptions”的方法。dart(undefined_method) 快速解决... 偷看问题

 import 'package:location/location.dart';

import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
// import 'package:map_view/map_view.dart';

class GoogleMapsDemo extends StatefulWidget {
  @override
  _GoogleMapsDemoState createState() => _GoogleMapsDemoState();
}

class _GoogleMapsDemoState extends State<GoogleMapsDemo> {
  GoogleMapController mapController;
  Location location = Location();

  Marker marker;

  @override
  void initState() {
    super.initState();
    location.onLocationChanged().listen((location) async {
      if (marker != null) {
        mapController.removeMarker(marker);
      }
      marker = await mapController?.addMarker(MarkerOptions(
        position: LatLng(location["latitude"], location["longitude"]),
      ));
      mapController?.moveCamera(
        CameraUpdate.newCameraPosition(
          CameraPosition(
            target: LatLng(
              location["latitude"],
              location["longitude"],
            ),
            zoom: 20.0,
          ),
        ),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Container(
            height: MediaQuery.of(context).size.height,
            width: MediaQuery.of(context).size.width,
            child: GoogleMap(

              onMapCreated: (GoogleMapController controller) {
                mapController = controller;
              },
              initialCameraPosition: CameraPosition(
                target: const LatLng(45.521563, -122.677433),
                zoom: 11.0,
              ),
              myLocationButtonEnabled: true,
              myLocationEnabled: true,
            ),
          ),
        ],
      ),
    );
  }
}

未为类“ GoogleMapController”定义方法“ addMarker”。 尝试将名称更正为现有方法的名称,或定义一个名为“ addMarker”的方法。dart(undefined_method) 没有为“ _GoogleMapsDemoState”类定义“ MarkerOptions”方法。 尝试将名称更正为现有方法的名称,或定义一个名为“ MarkerOptions”的方法。dart(undefined_method) 快速解决... 偷看问题

2 个答案:

答案 0 :(得分:1)

如果我没有完全误解,这篇文章应该会对您有所帮助。 https://stackoverflow.com/a/55000503/11620670

似乎扑朔迷离的团队做出了一些改变,并且Google Maps API现在基于Widget,而不再基于控制器。

看看flutter的文档和我发布的链接。我认为这应该可以解决您的问题,因为您在错误的一端寻求解决方案。

问候

答案 1 :(得分:0)

Puede que haya una major forma pero a mi mefuncionócon el evento onCameraMove para obtener laposicióndel mapa。 si alguien tiene una forma mas limpia me gustaria saberlo tambien。

class _GoogleMapsDemoState extends State<GoogleMapsDemo> {
  // ...
  LatLng currentLatLng = LatLng(0, 0); //Your inital location -> you need get real location xD


  Widget build(BuildContext context) {
    return GoogleMap(
      // ...
      onCameraMove: (position) {
        print(position);
        currentLatLng = LatLng(position.target.latitude, position.target.longitude);
      },
    );
  }

  void _add() {
    // ...

    final Marker marker = Marker(
      markerId: markerId,
      position: currentLatLng,
      infoWindow: InfoWindow(title: markerIdVal, snippet: '*'),
      onTap: () {
        // ...
      },
      onDragEnd: (LatLng position) {
        //...
      },
    );

    setState(() {
      markers[markerId] = marker;
    });
  }
}