我在我的Flutter应用中有一个GoogleMap。
当页面加载时,它会调用API并获取一系列的地理位置,并用此创建标记列表。
我的GoogleMap使用这个标记列表,它们显示得很好,但是我想让其中一个标记处于活动状态。 我在API文档中找不到任何可以实现这一点的内容。我该如何实现?
我的GoogleMap使用这个标记列表,它们显示得很好,但是我想让其中一个标记处于活动状态。 我在API文档中找不到任何可以实现这一点的内容。我该如何实现?
_googleMapController.showMarkerInfoWindow(allMarkers[0].markerId);
onTap
事件处理程序实现自定义活动状态。
在有状态的小部件中,创建一个状态来跟踪选定的标记,并通过比较它们的ID与突出显示的标记来重建所有标记:import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class GoogleMapsLabPage extends StatefulWidget {
@override
State<GoogleMapsLabPage> createState() => GoogleMapsLabPageState();
}
class GoogleMapsLabPageState extends State<GoogleMapsLabPage> {
final preset = [
{"id": "mountain-view", "lat": 37.421512, "lng": -122.084101},
{"id": "san-bruno", "lat": 37.62816, "lng": -122.426491},
{"id": "san-francisco", "lat": 37.789972, "lng": -122.390013},
{"id": "sunnyvale", "lat": 37.403694, "lng": -122.031583}
];
String _selectedOffice = '';
List<Marker> _buildMarkers() {
return preset.map((office) {
return Marker(
markerId: MarkerId(office['id']),
position: LatLng(office['lat'], office['lng']),
icon: office['id'] == _selectedOffice
? BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue)
: BitmapDescriptor.defaultMarker,
consumeTapEvents: true,
onTap: () {
setState(() {
_selectedOffice = office['id'];
});
});
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: GoogleMap(
initialCameraPosition: CameraPosition(target: LatLng(37.7, -122.2), zoom: 9.0),
markers: _buildMarkers().toSet(),
),
);
}
}
consumeTapEvents
参数设置为true
,我们可以禁用默认的点击处理方式,从而使地图居中于标记并显示其信息窗口。 mapController.addMarker(
MarkerOptions(
position: LatLng(your values here),
),
);