Flutter静态地图展示插件google_static_maps_controller的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter静态地图展示插件google_static_maps_controller的使用

插件介绍

google_static_maps_controller 是一个为Flutter应用提供简单声明式访问Google静态地图服务的插件。通过这个插件,开发者可以轻松地在Flutter应用中集成和自定义静态地图。

功能特性

Feature Status
Base Static map support
Zoom levels
Image sizes
Map types
Markers
Map styles
Paths
Encoded Polylines
Viewports
  • ✅ - 已完成
  • 🧪 - 实验性
  • ⚙️ - 开发中
  • ❌ - 未实现

快速开始

示例地图图片

map_screenshot

源代码示例

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Google static map demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

final retroMapStyle = [
  // 地图样式配置
];

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StaticMap(
        googleApiKey: "<REPLACE-WITH-GOOGLE-API-KEY>",
        width: MediaQuery.of(context).size.width,
        height: MediaQuery.of(context).size.height,
        scaleToDevicePixelRatio: true,
        zoom: 14,
        visible: const [
          GeocodedLocation.address('Santa Monica Pier'),
        ],
        styles: retroMapStyle,
        paths: <Path>[
          const Path(
            color: Colors.blue,
            points: [
              GeocodedLocation.address('Santa Monica Pier'),
              Location(34.011395, -118.494961),
              Location(34.011921, -118.493360),
              Location(34.012471, -118.491884),
              Location(34.012710, -118.489420),
              Location(34.014294, -118.486595),
              Location(34.016630, -118.482920),
              Location(34.018899, -118.480087),
              Location(34.021314, -118.477136),
              Location(34.022769, -118.474901),
            ],
          ),
          Path.circle(
            center: const Location(34.005641, -118.490229),
            color: Colors.green.withOpacity(0.8),
            fillColor: Colors.green.withOpacity(0.4),
            radius: 200, // meters
          ),
          const Path(
            encoded: true,
            points: [
              Location(34.016839, -118.488240),
              Location(34.019498, -118.491439),
              Location(34.024106, -118.485734),
              Location(34.021486, -118.482682),
              Location(34.016839, -118.488240),
            ],
            fillColor: Colors.black45,
            color: Colors.black,
          )
        ],
        markers: const <Marker>[
          Marker(
            color: Colors.amber,
            label: "X",
            locations: [
              GeocodedLocation.address("Santa Monica Pier"),
              GeocodedLocation.latLng(34.012849, -118.501478),
            ],
          ),
          Marker.custom(
            anchor: MarkerAnchor.center,
            icon: "https://goo.gl/1oTJ9Y",
            locations: [
              Location(34.012343, -118.482998),
            ],
          ),
          Marker(
            locations: [
              Location(34.006618, -118.500901),
            ],
            color: Colors.cyan,
            label: "W",
          )
        ],
      ),
    );
  }
}

使用 StaticMapController

Widget build(BuildContext context) {
  /// Declare static map controller
  const _controller = StaticMapController(
    googleApiKey: "<GOOGLE_API_KEY>",
    width: 400,
    height: 400,
    zoom: 10,
    center: Location(-3.1178833, -60.0029284),
  );

  /// Get map image provider from controller.
  /// You can also get image url by accessing
  /// `_controller.url` property.
  ImageProvider image = _controller.image;

  return Scaffold(
    body: Center(
      /// Display as a normal network image
      child: Image(image: image),
    ),
  );
}

注意事项

  1. API Key:请确保替换 <REPLACE-WITH-GOOGLE-API-KEY><GOOGLE_API_KEY> 为你的Google Maps API密钥。
  2. 依赖项:在pubspec.yaml文件中添加google_static_maps_controller依赖。
dependencies:
  flutter:
    sdk: flutter
  google_static_maps_controller: ^latest_version
  1. 权限:确保在AndroidManifest.xmlInfo.plist中添加必要的网络权限。

总结

google_static_maps_controller 提供了丰富的功能来展示和自定义静态地图。通过上述代码示例,你可以快速上手并在Flutter应用中集成静态地图。希望这篇指南对你有所帮助!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用google_static_maps_controller插件来展示静态地图的代码示例。这个插件允许你生成并展示Google静态地图的图像。

首先,确保你已经在pubspec.yaml文件中添加了google_static_maps_controller依赖:

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

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

接下来,你可以按照以下步骤在你的Flutter应用中展示静态地图:

  1. 导入必要的包

在你的Dart文件中(例如main.dart),导入必要的包:

import 'package:flutter/material.dart';
import 'package:google_static_maps_controller/google_static_maps_controller.dart';
  1. 创建静态地图控制器

创建一个GoogleStaticMapsController实例,并配置你的API密钥和地图参数。

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Static Map Example'),
        ),
        body: Center(
          child: GoogleStaticMapExample(),
        ),
      ),
    );
  }
}

class GoogleStaticMapExample extends StatefulWidget {
  @override
  _GoogleStaticMapExampleState createState() => _GoogleStaticMapExampleState();
}

class _GoogleStaticMapExampleState extends State<GoogleStaticMapExample> {
  GoogleStaticMapsController? _controller;

  @override
  void initState() {
    super.initState();
    _controller = GoogleStaticMapsController(
      apiKey: 'YOUR_GOOGLE_MAPS_API_KEY',  // 替换为你的Google Maps API密钥
      center: LatLng(37.7749, -122.4194),  // 地图中心点坐标
      zoom: 12,  // 缩放级别
      size: Size(600, 400),  // 地图尺寸
      mapType: MapType.roadmap,  // 地图类型
    );
  }

  @override
  Widget build(BuildContext context) {
    return _controller!.buildWidget(
      onImageReady: (imageProvider) {
        // 地图图像加载完成后回调
        print('Map image is ready');
      },
      onError: (error) {
        // 错误处理
        print('Error loading map: $error');
      },
    );
  }

  @override
  void dispose() {
    _controller?.dispose();
    super.dispose();
  }
}

在这个示例中:

  • 我们创建了一个GoogleStaticMapsController实例,并配置了API密钥、地图中心点、缩放级别、尺寸和地图类型。
  • build方法中,我们使用_controller!.buildWidget来生成并展示静态地图。
  • 提供了onImageReadyonError回调,分别处理地图图像加载完成和加载错误的情况。

请确保将YOUR_GOOGLE_MAPS_API_KEY替换为你自己的Google Maps API密钥,并确保你的API密钥具有访问静态地图API的权限。

以上代码展示了如何使用google_static_maps_controller插件在Flutter应用中展示静态地图。根据你的需求,你可以进一步自定义地图参数和回调处理。

回到顶部