Flutter:如何使用新的 Marker API 向 Google Maps 添加标记?

Posted

技术标签:

【中文标题】Flutter:如何使用新的 Marker API 向 Google Maps 添加标记?【英文标题】:Flutter: How to add marker to Google Maps with new Marker API? 【发布时间】:2019-07-26 18:10:27 【问题描述】:
    mapController.addMarker(
  MarkerOptions(
    position: LatLng(37.4219999, -122.0862462),
  ),
);

我在blog post 中看到了这段代码 sn-p,我正在尝试向 Google 地图添加标记。

没有为类“GoogleMapController”定义方法“addMarker”。

我认为图书馆已经改变,我想知道这样做的新方法是什么,我在 controller.dart 和 api reference 中查找但无法弄清楚。

我很高兴看到一些关于它的教程和博客文章,不要犹豫分享。

【问题讨论】:

【参考方案1】:

是的,谷歌地图 API 发生了变化,标记 API 是基于小部件的,不再基于控制器。

CHANGELOG.md

“重大变化。将 Marker API 更改为基于小部件,它是基于控制器的。还更改了示例应用程序以解决相同问题。”

我从github app example复制了一些我认为对你很重要的代码

Map<MarkerId, Marker> markers = <MarkerId, Marker>; // CLASS MEMBER, MAP OF MARKS

void _add() 
    var markerIdVal = MyWayToGenerateId();
    final MarkerId markerId = MarkerId(markerIdVal);

    // creating a new MARKER
    final Marker marker = Marker(
      markerId: markerId,
      position: LatLng(
        center.latitude + sin(_markerIdCounter * pi / 6.0) / 20.0,
        center.longitude + cos(_markerIdCounter * pi / 6.0) / 20.0,
      ),
      infoWindow: InfoWindow(title: markerIdVal, snippet: '*'),
      onTap: () 
        _onMarkerTapped(markerId);
      ,
    );

    setState(() 
      // adding a new marker to map
      markers[markerId] = marker;
    );


GoogleMap(
              onMapCreated: _onMapCreated,
              initialCameraPosition: const CameraPosition(
                target: LatLng(-33.852, 151.211),
                zoom: 11.0,
              ),
              // TODO(iskakaushik): Remove this when collection literals makes it to stable.
              // https://github.com/flutter/flutter/issues/28312
              // ignore: prefer_collection_literals
              markers: Set<Marker>.of(markers.values), // YOUR MARKS IN MAP
)

我建议您查看示例应用程序here。有更新到新的 API。

【讨论】:

这些链接已移至github.com/flutter/plugins/blob/master/packages/… 非常感谢@A.S.H 你在哪里调用_add()?如果我想在 initState 中填充我的标记列表怎么办? 我想在flutter map web中添加标记【参考方案2】:

我从谷歌codelabs.做下面的例子

Map<MarkerId, Marker> markers = <MarkerId, Marker>;
LatLng _center =  LatLng(9.669111, 80.014007);

onMap 创建添加单个静态标记

void _onMapCreated(GoogleMapController controller) 
    mapController = controller;

    final marker = Marker(
      markerId: MarkerId('place_name'),
      position: LatLng(9.669111, 80.014007),
      // icon: BitmapDescriptor.,
      infoWindow: InfoWindow(
        title: 'title',
        snippet: 'address',
      ),
    );

    setState(() 
      markers[MarkerId('place_name')] = marker;
    );
  

谷歌地图小部件:

GoogleMap(
                onMapCreated: _onMapCreated,
                initialCameraPosition: CameraPosition(
                  target: _center,
                  zoom: 14.0,
                ),
                markers: markers.values.toSet(),
              ),

【讨论】:

以上是关于Flutter:如何使用新的 Marker API 向 Google Maps 添加标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中使用 CoinMarketCap API

Flutter/Dart 为 Google Maps Marker 添加自定义点击事件

如何在flutter中将标记从firebase(真实数据库)检索到新的google maps api

google map api V3 如何对marker进行操作。

如何设置Marker图标的位置

如何在 Flutter 的 Canvas 上绘制 Widget?