我使用
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);
},
),
),
);
}
}
首先您需要确保在谷歌云中启用 PlacesAPI:
请注意,您可能需要启用计费帐户才能访问 PlacesAPI,即使它已在您的控制台中启用。
二、配置API Key限制 API 密钥限制对于保护密钥并确保其在调试和发布模式下工作至关重要。您需要根据您正在开发的平台配置限制。
通过应用程序包名称和 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