Flutter地图标注插件map_mapper_annotations的使用

map_mapper_annotations #

定义由 map_mapper_generator 包使用的注解。

开始使用 #

为了开始使用,可以查看示例项目在 https://gitlab.com/dartaculous/dartaculous/-/tree/main/map_mapper/map_mapper_example

上下文 #

该包是构成 Dartaculous 框架 的一组松散集成包的一部分。

使用 #

在这个示例中,我们将展示如何使用 map_mapper_annotations 包来创建一个带有标注的地图应用。我们将使用 Google Maps 插件来实现这一功能。

添加依赖 #

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

dependencies:
  flutter:
    sdk: flutter
  google_maps_flutter: ^2.0.6
  map_mapper_annotations: ^1.0.0

然后运行 flutter pub get 来获取这些依赖。

创建标注类 #

接下来,我们创建一个标注类,用于表示地图上的点。这里我们创建一个名为 MarkerModel 的类,并使用 [@MapMapperAnnotation](/user/MapMapperAnnotation) 注解来标记它。

import 'package:map_mapper_annotations/map_mapper_annotations.dart';

[@MapMapperAnnotation](/user/MapMapperAnnotation)()
class MarkerModel {
  final String title;
  final LatLng position;

  MarkerModel({required this.title, required this.position});
}

创建地图页面 #

现在我们可以创建一个地图页面,在这个页面上我们将添加一些标注。首先,我们需要初始化 Google Maps 并添加一些标注。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MapPage(),
    );
  }
}

class MapPage extends StatefulWidget {
  @override
  _MapPageState createState() => _MapPageState();
}

class _MapPageState extends State<MapPage> {
  late GoogleMapController mapController;
  Set<Marker> markers = {};

  void _onMapCreated(GoogleMapController controller) {
    setState(() {
      mapController = controller;
      _addMarkers();
    });
  }

  void _addMarkers() {
    final markerModel1 = MarkerModel(
      title: 'Marker 1',
      position: LatLng(37.4219999, -122.0840575),
    );

    final markerModel2 = MarkerModel(
      title: 'Marker 2',
      position: LatLng(37.4229999, -122.0850575),
    );

    markers.add(Marker(
      markerId: MarkerId(markerModel1.title),
      position: markerModel1.position,
      infoWindow: InfoWindow(title: markerModel1.title),
    ));

    markers.add(Marker(
      markerId: MarkerId(markerModel2.title),
      position: markerModel2.position,
      infoWindow: InfoWindow(title: markerModel2.title),
    ));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google Maps with Annotations'),
      ),
      body: GoogleMap(
        onMapCreated: _onMapCreated,
        initialCameraPosition: CameraPosition(
          target: LatLng(37.4219999, -122.0840575),
          zoom: 11.0,
        ),
        markers: markers,
      ),
    );
  }
}

在上面的代码中,我们创建了一个 MarkerModel 类来表示地图上的点,并在 _addMarkers 方法中创建了两个标注。然后我们在 GoogleMap 小部件中将这些标注添加到地图上。


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

1 回复

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


当然,下面是一个关于如何使用 map_mapper_annotations 插件在 Flutter 中添加地图标注的示例代码。这个插件通常用于在地图上显示和管理标注点。

首先,确保在你的 pubspec.yaml 文件中添加 map_mapper_annotations 依赖:

dependencies:
  flutter:
    sdk: flutter
  map_mapper_annotations: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,我们创建一个简单的 Flutter 应用,展示如何使用 map_mapper_annotations 在地图上添加标注。

main.dart

import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong2/latlong.dart';
import 'package:map_mapper_annotations/map_mapper_annotations.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Map with Annotations'),
        ),
        body: MapScreen(),
      ),
    );
  }
}

class MapScreen extends StatefulWidget {
  @override
  _MapScreenState createState() => _MapScreenState();
}

class _MapScreenState extends State<MapScreen> {
  final List<Marker> _markers = [];

  @override
  void initState() {
    super.initState();
    // 添加一些初始标注点
    _markers.add(
      Marker(
        width: 80.0,
        height: 80.0,
        point: LatLng(51.5, -0.09),
        builder: (ctx) => Container(
          child: Icon(Icons.location_on, color: Colors.redAccent,),
        ),
      ),
    );
    // 可以根据需要添加更多标注点
  }

  @override
  Widget build(BuildContext context) {
    return FlutterMap(
      options: MapOptions(
        center: LatLng(51.5, -0.09),
        zoom: 13.0,
      ),
      layers: [
        TileLayerOptions(
          urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
          subdomains: ['a', 'b', 'c'],
        ).toTileLayer(),
        MarkerLayerOptions(
          markers: _markers,
        ),
      ],
    );
  }
}

解释

  1. 依赖引入

    • flutter_map:一个流行的 Flutter 地图库。
    • latlong2:处理地理坐标的库。
    • map_mapper_annotations:用于在地图上添加标注的插件。
  2. 主应用

    • MyApp 是主应用类,包含一个 Scaffold 和一个 AppBar
  3. 地图屏幕

    • MapScreen 是一个有状态的组件,它包含一个 _markers 列表来存储标注点。
    • initState 方法中,我们添加了一个初始标注点。
    • build 方法中,我们创建了 FlutterMap 组件,并设置了地图的中心点、缩放级别和图层。
    • TileLayerOptions 用于加载 OpenStreetMap 的瓦片图层。
    • MarkerLayerOptions 用于显示标注点列表。
  4. 标注点

    • 每个 Marker 对象都有一个位置 (LatLng),一个大小(宽和高),和一个 builder 函数用于构建标注点的图标。

这个示例展示了如何在 Flutter 应用中使用 map_mapper_annotations 插件在地图上添加和管理标注点。你可以根据需要扩展此示例,例如添加交互功能、动态更新标注点等。

回到顶部