Flutter地图展示插件google_maps_flutter的使用

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

Flutter地图展示插件google_maps_flutter的使用

Google Maps for Flutter

pub package

google_maps_flutter 是一个Flutter插件,提供了一个Google Maps小部件。

平台 Android iOS Web
支持版本 SDK 20+ iOS 14+ Flutter官方支持平台

开始使用

获取API Key

Google Cloud Platform 获取API Key,并为每个平台启用Google Map SDK:

  • 访问 Google Developers Console
  • 选择或创建项目
  • 导航菜单 -> “Google Maps”
  • “APIs” 下选择需要启用的服务:
    • Android: 启用 “Maps SDK for Android”
    • iOS: 启用 “Maps SDK for iOS”
    • Web: 启用 “Maps JavaScript API”

确保所有已启用的API都在 “Enabled APIs” 列表中。更多详情请参阅 Google Maps Platform 入门

配置各平台

Android

  1. android/app/build.gradle 中设置 minSdkVersion:

    android {
        defaultConfig {
            minSdkVersion 20
        }
    }
    
  2. 在应用清单文件 android/app/src/main/AndroidManifest.xml 中指定你的API Key:

    <manifest ...
      <application ...
        <meta-data android:name="com.google.android.geo.API_KEY"
                   android:value="YOUR KEY HERE"/>
    

iOS

在应用代理文件中指定API Key (ios/Runner/AppDelegate.mios/Runner/AppDelegate.swift):

  • Objective-C代码:

    #include "AppDelegate.h"
    #include "GeneratedPluginRegistrant.h"
    #import "GoogleMaps/GoogleMaps.h"
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      [GMSServices provideAPIKey:@"YOUR KEY HERE"];
      [GeneratedPluginRegistrant registerWithRegistry:self];
      return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }
    @end
    
  • Swift代码:

    import UIKit
    import Flutter
    import GoogleMaps
    
    @UIApplicationMain
    @objc class AppDelegate: FlutterAppDelegate {
      override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
      ) -> Bool {
        GMSServices.provideAPIKey("YOUR KEY HERE")
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
      }
    }
    

Web

修改 web/index.html 文件以包含Google Maps JS SDK。详情见 google_maps_flutter_web README

使用示例

下面是一个简单的地图显示示例:

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

  @override
  State<MapSample> createState() => MapSampleState();
}

class MapSampleState extends State<MapSample> {
  final Completer<GoogleMapController> _controller = Completer();

  static const CameraPosition _kGooglePlex = CameraPosition(
    target: LatLng(37.42796133580664, -122.085749655962),
    zoom: 14.4746,
  );

  static const CameraPosition _kLake = CameraPosition(
      bearing: 192.8334901395799,
      target: LatLng(37.43296265331129, -122.08832357078792),
      tilt: 59.440717697143555,
      zoom: 19.151926040649414);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GoogleMap(
        mapType: MapType.hybrid,
        initialCameraPosition: _kGooglePlex,
        onMapCreated: (GoogleMapController controller) {
          _controller.complete(controller);
        },
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: _goToTheLake,
        label: const Text('To the lake!'),
        icon: const Icon(Icons.directions_boat),
      ),
    );
  }

  Future<void> _goToTheLake() async {
    final GoogleMapController controller = await _controller.future;
    await controller.animateCamera(CameraUpdate.newCameraPosition(_kLake));
  }
}

这个例子展示了如何创建一个基本的地图视图,并添加了一个浮动按钮用于切换到另一个位置(湖泊)。通过 _controller 可以控制地图的各种属性和行为。


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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用google_maps_flutter插件来展示地图的代码案例。这个示例将展示如何集成Google Maps插件、配置API密钥,并在Flutter应用中显示一个基本的地图。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  google_maps_flutter: ^2.0.10  # 请检查最新版本号

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

步骤 2: 配置Google Maps API密钥

  1. 获取API密钥:访问Google Cloud Platform Console,创建一个项目并启用Google Maps Platform API。然后,创建一个API密钥。

  2. 限制API密钥:为了安全起见,你应该限制API密钥的使用。你可以在Google Cloud Console中设置API密钥的限制条件,例如仅允许来自特定应用的请求。

  3. 将API密钥添加到Android和iOS项目中

    • 对于Android:将API密钥添加到android/app/src/main/AndroidManifest.xml中:

      <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR_API_KEY_HERE"/>
      
    • 对于iOS:将API密钥添加到ios/Runner/Info.plist中,作为GMSServicesAPIKey

      <key>GMSServices</key>
      <dict>
        <key>APIKey</key>
        <string>YOUR_API_KEY_HERE</string>
      </dict>
      

步骤 3: 编写Flutter代码

在你的Flutter项目中,创建一个新的Dart文件(例如map_screen.dart)并编写以下代码来显示地图:

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

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

class _MapScreenState extends State<MapScreen> {
  late GoogleMapController _controller;
  late LatLng _center;
  final Set<Marker> _markers = HashSet<Marker>();

  @override
  void initState() {
    super.initState();
    _center = LatLng(-34, 151); // 默认中心点:悉尼
    _markers.add(Marker(
      markerId: MarkerId('marker_id_home'),
      position: _center,
      infoWindow: InfoWindow(
        title: 'Sydney',
        snippet: 'Australia',
      ),
    ));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google Maps Flutter Demo'),
      ),
      body: GoogleMap(
        mapType: MapType.normal,
        initialCameraPosition: CameraPosition(
          target: _center,
          zoom: 11.0,
        ),
        markers: _markers,
        onMapCreated: (GoogleMapController controller) {
          _controller = controller;
        },
      ),
    );
  }
}

步骤 4: 在主应用中展示地图

在你的main.dart文件中,导入并展示MapScreen

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Google Maps Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MapScreen(),
    );
  }
}

运行应用

确保你已经正确配置了API密钥,并且设备或模拟器能够访问互联网。然后,通过运行flutter run来启动你的Flutter应用。你应该能看到一个显示悉尼的Google Maps界面。

这个示例展示了如何使用google_maps_flutter插件在Flutter应用中显示一个基本的地图,并添加了一个标记。你可以根据需要进一步扩展和定制地图功能。

回到顶部