Я играю с Google Maps для флаттера .Я хочу, чтобы представление карты соответствовало всем маркерам на экране.По сути, я хочу сделать то же самое, что и здесь для Android.
Я предположил, что cameraTargetBounds
описывает область, которая должна соответствовать границам экрана.Но на самом деле это не совсем вписывается в эту область, фокусируясь где-то посередине.
Что я сделал до сих пор:
@override
Widget build(BuildContext context) {
final bloc = Provider.of<BlocMap>(context);
return SafeArea(
child: Container(
child: Stack(
children: <Widget>[
Positioned.fill(
child: StreamBuilder<MapData>(
stream: bloc.mapData,
builder: (context, snap) {
final mapData = snap.data;
print("mapData: $mapData");
return GoogleMap(
padding: EdgeInsets.only(bottom: 42),
mapType: _mapType,
cameraTargetBounds: mapData?.markers == null
? CameraTargetBounds.unbounded
: CameraTargetBounds(_bounds(mapData?.markers)),
initialCameraPosition: _cameraPosition,
myLocationEnabled: true,
myLocationButtonEnabled: true,
gestureRecognizers: _buildGestureRecognizer(),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
markers: mapData?.markers,
polylines: mapData?.polylines,
polygons: mapData?.polygons,
onLongPress: (latLng) {
print("LatLng: $latLng");
},
);
}),
),
Positioned(
left: 0,
right: 0,
bottom: 0,
child: _buildBtnBar(),
)
],
),
),
);
LatLngBounds _bounds(Set<Marker> markers) {
if (markers == null || markers.isEmpty) return null;
return _createBounds(markers.map((m) => m.position).toList());
}
LatLngBounds _createBounds(List<LatLng> positions) {
final southwestLat = positions.map((p) => p.latitude).reduce((value, element) => value < element ? value : element); // smallest
final southwestLon = positions.map((p) => p.longitude).reduce((value, element) => value < element ? value : element);
final northeastLat = positions.map((p) => p.latitude).reduce((value, element) => value > element ? value : element); // biggest
final northeastLon = positions.map((p) => p.longitude).reduce((value, element) => value > element ? value : element);
return LatLngBounds(
southwest: LatLng(southwestLat, southwestLon),
northeast: LatLng(northeastLat, northeastLon)
);
}
Каков намеченный способ достижения этой базовой функциональности во флаттере?Есть предложения?