未为 class 'GoogleMapController' 定义方法 'removeMarker' 和 'addMarker'

The method 'removeMarker' and 'addMarker' isn't defined for the class 'GoogleMapController'

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

的方法

未为 class“_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,
            ),
          ),
        ],
      ),
    );
  }
}

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

如果我没记错的话,这篇文章应该能帮到你。

似乎 flutter 团队改变了一些东西,Google 地图 API 现在 Widget-based 并且不再基于控制器。

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

可能有更好的方法,但以下方法对我有用 onCameraMove 事件以获得位置。如果有人有更清洁的方法请告诉我。

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;
    });
  }
}