You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何将经纬度列表转换为Marker类型列表

解决方法:将Map列表转换为Marker列表

你可以通过两种常用方式实现转换,下面分别说明:

方式一:使用forEach循环遍历转换

先清空原有的markers列表,再遍历positionMarkers逐个创建Marker并添加进去:

// 在MapMarkers类中添加初始化方法
void initMarkers() {
  markers.clear();
  for (var markerData in positionMarkers) {
    final marker = Marker(
      markerId: MarkerId(markerData['id'].toString()), // 将int类型的id转为String
      position: LatLng(
        markerData['lat'] as double,
        markerData['lng'] as double,
      ),
      infoWindow: InfoWindow(
        title: 'Marker ${markerData['id']}', // 可选:给信息窗添加标题
      ),
    );
    markers.add(marker);
  }
  notifyListeners(); // 通知UI更新
}

方式二:使用map方法(更简洁)

利用Dart的map方法直接将positionMarkers映射为List<Marker>,写法更简洁高效:

// 可以直接替换原有markers的初始化,或在方法中赋值
List<Marker> get convertedMarkers => positionMarkers.map((data) {
      return Marker(
        markerId: MarkerId(data['id'].toString()),
        position: LatLng(data['lat'] as double, data['lng'] as double),
        infoWindow: InfoWindow(title: 'Marker ${data['id']}'),
      );
    }).toList();

修改后的完整类代码

如果希望初始化时就完成转换,可直接在构造函数中处理:

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

class MapMarkers with ChangeNotifier {
  List<Map<String, dynamic>> positionMarkers = [
    {
      'id': 1,
      'lat': 22.6434340,
      'lng': 88.446740,
    },
    {
      'id': 2,
      'lat': 22.6435442,
      'lng': 88.456742,
    },
    {
      'id': 3,
      'lat': 22.6436544,
      'lng': 88.466744,
    },
    {
      'id': 4,
      'lat': 22.6437646,
      'lng': 88.476746,
    },
    {'id': 5, 'lat': 22.6438748, 'lng': 88.486748}
  ];

  late List<Marker> markers;

  MapMarkers() {
    // 初始化阶段完成转换
    markers = positionMarkers.map((data) {
      return Marker(
        markerId: MarkerId(data['id'].toString()),
        position: LatLng(data['lat'] as double, data['lng'] as double),
        infoWindow: InfoWindow(title: 'Marker ${data['id']}'),
      );
    }).toList();
  }
}

注意事项

  • MarkerId要求传入字符串类型,需将原数据中的int类型id转换为String
  • LatLng的参数为double类型,确保从Map中取出的lat和lng正确转换为double
  • 若后续动态更新标记列表,记得调用notifyListeners()触发UI刷新

内容的提问来源于stack exchange,提问作者coolhack7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:05:17