Flutter交互式地图标记插件interactive_maps_marker的使用

Flutter交互式地图标记插件interactive_maps_marker的使用

Demo

使用方法

首先在 pubspec.yaml 文件的 dependencies: 部分添加以下依赖:

dependencies: 
  interactive_maps_marker: ^0.0.2

该插件依赖于 google_maps_flutter,因此请先按照此指南进行设置。

更新依赖项:

flutter pub get

现在可以在你的widget树中添加 InteractiveMapsMarker 小部件了。

简单使用

在你的widget中导入包并使用 InteractiveMapsMarker 小部件。

示例

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

class ExplorePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return InteractiveMapsMarker(
      items: [
        MarkerItem(id: 1, latitude: 31.4673274, longitude: 74.2637687),
        MarkerItem(id: 2, latitude: 31.4718461, longitude: 74.3531591),
      ],
      center: LatLng(31.4906504, 74.319872),
      itemContent: (context, index) {
        return Text("当前项目 $index");
      },
    );
  }
}

更多关于Flutter交互式地图标记插件interactive_maps_marker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter交互式地图标记插件interactive_maps_marker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


interactive_maps_marker 是一个可以帮助你在 Flutter 应用中实现交互式地图标记的插件。虽然 Flutter 社区中更广泛使用的插件是 flutter_map 或 Google Maps 插件,但如果你已经选择了 interactive_maps_marker,以下是一个基本的使用指南。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 interactive_maps_marker 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  interactive_maps_marker: ^latest_version

然后,运行 flutter pub get 来获取依赖包。

2. 基本使用

2.1 导入包

在你的 Dart 文件中导入 interactive_maps_marker 包:

import 'package:interactive_maps_marker/interactive_maps_marker.dart';

2.2 创建地图

你可以使用 InteractiveMarkerMap widget 来创建一个带有标记的交互式地图。

class MyMapPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Interactive Map Example'),
      ),
      body: InteractiveMarkerMap(
        initialCenter: LatLng(37.7749, -122.4194), // 初始中心点(旧金山)
        initialZoom: 10.0, // 初始缩放级别
        markers: [
          Marker(
            position: LatLng(37.7749, -122.4194), // 标记的位置
            builder: (context) => Icon(Icons.location_on, color: Colors.red), // 标记的图标
          ),
          Marker(
            position: LatLng(37.7849, -122.4294),
            builder: (context) => Icon(Icons.location_on, color: Colors.blue),
          ),
        ],
        onTap: (LatLng position) {
          print('Map tapped at: $position');
        },
      ),
    );
  }
}

2.3 运行应用

在你的 main.dart 文件中,设置 MyMapPage 为应用的首页:

import 'package:flutter/material.dart';
import 'my_map_page.dart'; // 你的地图页面

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Interactive Map Example',
      home: MyMapPage(),
    );
  }
}

3. 高级用法

3.1 自定义标记

你可以通过 Markerbuilder 参数自定义标记的外观。例如,使用一个 Container 来创建一个带有文本的标记:

Marker(
  position: LatLng(37.7749, -122.4194),
  builder: (context) => Container(
    padding: EdgeInsets.all(8.0),
    decoration: BoxDecoration(
      color: Colors.blue,
      borderRadius: BorderRadius.circular(12.0),
    ),
    child: Text('San Francisco', style: TextStyle(color: Colors.white)),
  ),
),

3.2 处理标记点击事件

你可以通过 onMarkerTap 参数来处理标记的点击事件:

InteractiveMarkerMap(
  initialCenter: LatLng(37.7749, -122.4194),
  initialZoom: 10.0,
  markers: [
    Marker(
      position: LatLng(37.7749, -122.4194),
      builder: (context) => Icon(Icons.location_on, color: Colors.red),
      onTap: () {
        print('Marker tapped!');
      },
    ),
  ],
  onTap: (LatLng position) {
    print('Map tapped at: $position');
  },
),

3.3 动态添加和移除标记

你可以通过 InteractiveMarkerMapController 来动态添加或移除标记。首先,创建一个 InteractiveMarkerMapController 并将其传递给 InteractiveMarkerMap

final controller = InteractiveMarkerMapController();

InteractiveMarkerMap(
  controller: controller,
  initialCenter: LatLng(37.7749, -122.4194),
  initialZoom: 10.0,
  markers: [],
  onTap: (LatLng position) {
    print('Map tapped at: $position');
  },
),

然后,你可以使用 controller.addMarkercontroller.removeMarker 动态管理标记:

controller.addMarker(
  Marker(
    position: LatLng(37.7749, -122.4194),
    builder: (context) => Icon(Icons.location_on, color: Colors.red),
    onTap: () {
      print('Marker tapped!');
    },
  ),
);
回到顶部