Flutter 版 Google 地图不显示兴趣点

问题描述 投票:0回答:1

我使用

google_maps_flutter: ^2.7.0
显示基于用户位置的标记,效果很好,但我没有看到用户周围的任何 POI。我知道它们应该被展示。我正在将 Flutter 应用程序从渐进式 Web 应用程序迁移到 Android 和 iOS 应用程序,并且在网络上我可以看到所有 POI 并能够单击它们。如果可能的话我想要这个功能。单击 POI 并显示带有一些数据的底部模式。

Google 地图 Android API 密钥已添加到 AndroidManifest 中

  <application android:label="nftgame" android:name="${applicationName}" android:icon="@mipmap/ic_launcher">

        <meta-data android:name="com.google.android.geo.API_KEY" android:value="[apiKeyValue]"/>

API 密钥没有任何限制,因为我们现在只是测试。

在真实设备上进行测试。

import 'dart:async';

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

class GoogleMapWidget extends StatefulWidget {
  final double lat;
  final double lng;
  final String name;
  final String id;
  final dynamic height;
  final bool allRound;
  const GoogleMapWidget({
    super.key,
    required this.lat,
    required this.lng,
    required this.name,
    required this.id,
    required this.height,
    required this.allRound,
  });
  @override
  State<GoogleMapWidget> createState() => _GoogleMapWidgetState();
}

class _GoogleMapWidgetState extends State<GoogleMapWidget> {
  final Completer<GoogleMapController> mapController = Completer();

  @override
  void dispose() {
    mapController.future.then((controller) {
      controller.dispose();
    });
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    List<Marker> markers = <Marker>[
      Marker(
        markerId: MarkerId(widget.id),
        position: LatLng(widget.lat, widget.lng),
        infoWindow: InfoWindow(title: widget.name),
      )
    ];

    return Container(
      padding: const EdgeInsets.all(10.0),
      decoration: BoxDecoration(
        borderRadius: widget.allRound
            ? BorderRadius.circular(10.0)
            : const BorderRadius.only(
                topLeft: Radius.circular(10.0),
                topRight: Radius.circular(10.0)),
        color: Colors.grey[200],
      ),
      child: SizedBox(
        height: widget.height,
        width: MediaQuery.of(context).size.width,
        child: GoogleMap(
          onTap: (LatLng position) {
            print(position);
          },
          initialCameraPosition: CameraPosition(
            target: LatLng(widget.lat, widget.lng),
            zoom: 17.0,
          ),
          mapType: MapType.normal,
          markers: Set<Marker>.of(markers),
          onMapCreated: (GoogleMapController controller) {
            mapController.complete(controller);
          },
        ),
      ),
    );
  }
}

android flutter google-maps
1个回答
0
投票

首先您需要确保在谷歌云中启用 PlacesAPI:

  • 转到 Google Cloud Console。
  • 选择您的项目。
  • 导航到 API 和服务 > 库。
  • 搜索并启用 Places API。

请注意,您可能需要启用计费帐户才能访问 PlacesAPI,即使它已在您的控制台中启用。

二、配置API Key限制 API 密钥限制对于保护密钥并确保其在调试和发布模式下工作至关重要。您需要根据您正在开发的平台配置限制。

通过应用程序包名称和 SHA-1 证书指纹进行限制:

  1. 转到 Google Cloud Console。
  2. 导航到 API 和服务 > 凭据。
  3. 单击您的 API 密钥。
  4. 在应用程序限制下,选择 Android 应用程序。
  5. 添加应用程序的包名称和 SHA-1 证书指纹。到 获取 SHA-1 指纹:

对于调试版本: 在终端中运行以下命令以获取调试 SHA-1 指纹:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

对于发布版本: 从用于签署您的密钥的密钥库中获取 SHA-1 指纹 发布APK:

keytool -list -v -keystore -alias

  1. 将两个 SHA-1 指纹添加到 Android 应用程序部分。
  2. 在 API 限制下,选择限制密钥并选择您的 API 密钥将访问(例如,Google Maps JavaScript API、Places API)。
© www.soinside.com 2019 - 2024. All rights reserved.