Flutter地图功能插件ptwcode_map的使用

Flutter地图功能插件ptwcode_map的使用

ptwcode_map 是一个高度可配置的 Flutter 地图插件,支持多种功能,如标记、自定义标记、聚类、自定义聚类、用户位置、折线、自定义折线、初始位置和自定义大小等。它非常适合需要灵活控制地图展示的应用。

示例

首先,我们来看一下 ptwcode_map 的演示效果:

ptwcode_map 演示

开始使用

要开始使用 ptwcode_map,你可以参考其官方示例应用。以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 ptwcode_map

示例代码

import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:ptwcode_map/ptwcode_map.dart';

// 假设这些是从其他文件导入的数据
import 'env.dart';
import 'locations.dart';
import 'ui/bottom.dart';
import 'ui/cluster.dart';
import 'ui/marker_wi.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final _ctrl = MapCtrl();
  var _markers = allMarkers; // 初始标记数据
  var _pLines = allPolylines; // 初始折线数据
  var _debugMode = false; // 调试模式
  var _clusterMode = false; // 聚类模式

  // 切换标记数据
  void _onTapSwitchMarkers() {
    if (_markers.length == 15) return setState(() => _markers = markers1);
    if (_markers == markers1) return setState(() => _markers = markers2);
    if (_markers == markers2) return setState(() => _markers = markers3);
    if (_markers == markers3) setState(() => _markers = allMarkers);
  }

  // 切换调试模式
  void _toggleDebugMode() => setState(() => _debugMode = !_debugMode);

  // 切换聚类模式
  void _toggleClusterMode() => setState(() => _clusterMode = !_clusterMode);

  // 切换折线数据
  void _onTapSwitchLines() {
    if (_pLines.length == 3) return setState(() => _pLines = polylines1);
    if (_pLines == polylines1) return setState(() => _pLines = polylines2);
    if (_pLines == polylines2) return setState(() => _pLines = polylines3);
    if (_pLines == polylines3) setState(() => _pLines = allPolylines);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    Widget current = PTWCodeMap(
      ctrl: _ctrl,
      user: mapUser,
      styleId: mapStyleId,
      accessToken: mapAccessToken,
      gps: myGps,
      markers: _markers,
      debugMode: _debugMode,
      markerBuilder: (size, data) => MarkerWi(size: size, data: data),
      enableCluster: _clusterMode,
      clusterBuilder: (count, size) => Cluster(count: count, size: size),
      polylines: _pLines,
      // heading: 90,
      // initPos: LatLon(41.50758338587537, 19.794688975005975),
      // initZoom: 16,
      // width: 300,
      // height: 250,
      // enableTouch: false,
      // northBound: LatLon(41.35175048872195, 19.806819300964158),
      // southBound: LatLon(41.297166569919106, 19.837698729186002),
      // eastBound: LatLon(41.33577699035093, 19.871467143008942),
      // westBound: LatLon(41.329099337693435, 19.783003826896167),
      // markerRadius: 16,
      // clusterRadius: 48,
      // placeMarkerAbovePolyline: false,
    );

    current = Stack(
      children: [
        current,
        Bottom(
          ctrl: _ctrl,
          activeMarkers: _markers.map((el) => el.latLon).toList(),
          onTapSwitchMarkers: _onTapSwitchMarkers,
          debugMode: _debugMode,
          toggleDebugMode: _toggleDebugMode,
          clusterMode: _clusterMode,
          toggleClusterMode: _toggleClusterMode,
          onTapSwitchLines: _onTapSwitchLines,
        ),
      ],
    );

    return Scaffold(
      body: Column(
        children: [
          SizedBox(height: topPadding(context)),
          Expanded(child: current),
        ],
      ),
    );
  }
}

// 获取顶部填充高度
double topPadding(BuildContext context) {
  final mQ = MediaQuery.of(context);
  return (!kIsWeb && Platform.isMacOS) ? 28 : mQ.padding.top;
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用ptwcode_map插件来实现地图功能的示例代码。ptwcode_map是一个假设的插件名称,实际使用时,请确保你使用的是真实存在的插件,并且已经正确地在pubspec.yaml文件中添加了依赖。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加ptwcode_map插件的依赖(注意:这里的ptwcode_map是一个假设的插件名,你需要替换为实际的插件名,例如flutter_map等):

dependencies:
  flutter:
    sdk: flutter
  ptwcode_map: ^x.y.z  # 替换为实际的插件版本

然后运行flutter pub get来安装依赖。

2. 导入插件并初始化地图

在你的Dart文件中(例如main.dart),导入ptwcode_map插件并初始化地图。以下是一个基本的示例:

import 'package:flutter/material.dart';
import 'package:ptwcode_map/ptwcode_map.dart'; // 假设的插件导入路径

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

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

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

class _MapScreenState extends State<MapScreen> {
  // 地图控制器
  late PtwcodeMapController mapController;

  @override
  void initState() {
    super.initState();
    // 初始化地图控制器
    mapController = PtwcodeMapController()
      ..onMapCreated = _onMapCreated;
  }

  void _onMapCreated(PtwcodeMapController controller) {
    // 地图创建后的回调,可以在这里设置初始视角等
    controller.moveCamera(CameraUpdate.newLatLngZoom(
      LatLng(latitude, longitude), // 替换为你的初始经纬度
      zoomLevel, // 替换为你的初始缩放级别
    ));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('地图示例'),
      ),
      body: PtwcodeMap(
        mapController: mapController,
        initialCameraPosition: CameraPosition(
          target: LatLng(latitude, longitude), // 替换为你的初始经纬度
          zoom: zoomLevel, // 替换为你的初始缩放级别
        ),
        markers: Set<Marker>.of(<Marker>[
          Marker(
            markerId: MarkerId('marker_1'),
            position: LatLng(latitude, longitude), // 替换为你的标记位置
            infoWindow: InfoWindow(title: '标记标题', snippet: '标记描述'),
          ),
        ]),
        // 其他地图配置...
      ),
    );
  }
}

// 示例经纬度和缩放级别(请根据实际情况替换)
const double latitude = 37.7749; // 旧金山纬度
const double longitude = -122.4194; // 旧金山经度
const double zoomLevel = 14.0; // 缩放级别

注意事项

  1. 插件名称ptwcode_map是一个假设的插件名,实际使用时请替换为真实的地图插件名,例如flutter_mapgoogle_maps_flutter等。
  2. 依赖版本:在pubspec.yaml中,确保使用正确的插件版本。
  3. API密钥:如果使用Google Maps等需要API密钥的服务,请确保在项目中正确配置了API密钥。
  4. 权限:对于某些地图服务,可能需要在AndroidManifest.xmlInfo.plist中添加相应的权限声明。

以上代码提供了一个基本的框架,你可以根据自己的需求进一步定制和扩展地图功能。

回到顶部