Как сделать initialCameraPosition с моего адреса на флаттер-картах гугл?
Я попытался определить положение камеры своего адреса с помощью библиотеки 'geolocator', но я не знаю, как установить его в исходное положение камеры на карте Google
searchAndNavigate() {
searchAddress = widget.author.address;
Geolocator().placemarkFromAddress(searchAddress).then((result) {
mapController.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
target:
LatLng(result[0].position.latitude, result[0].position.longitude),
zoom: 10.0)));
});
}
void onMapCreated(controller) {
setState(() {
mapController = controller;
});
}
Widget mapSection = Container(
height: 400,
width: 400,
child: Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
child: GoogleMap(
onMapCreated: onMapCreated,
initialCameraPosition: CameraPosition(
target: LatLng(40.7128, -74.0060), zoom: 10.0)),
),
);
@override
void initState() {
super.initState();
searchAndNavigate();
}
2 ответа
Решение
Так я установил начальное положение камеры
//initialize _center
Position _center;
final Set<Marker> _markers = {};
@override
void initState() {
super.initState();
//Then define _center in initState
_center = Position(locationData.latitude, locationData.longitude);
_markers.add(
Marker(
// This marker id can be anything that uniquely identifies each marker.
markerId: MarkerId(_center.toString()),
position: _center,
infoWindow: InfoWindow(
title: widget.hearingItem.location.locationName,
snippet: widget.hearingItem.location.address,
),
icon: BitmapDescriptor.defaultMarker,
),
);
}
GoogleMap(
myLocationEnabled: true,
onMapCreated: _onMapCreated,
markers: _markers,
gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>[
Factory<OneSequenceGestureRecognizer>(
() => EagerGestureRecognizer(),
),
].toSet(),
//Finally assign _center to target in CameraPosition
initialCameraPosition: CameraPosition(
target: _center,
zoom: 11.0,
),
);
Если вам нужно реализовать это, вам нужно указать ему настраиваемое местоположение или отобразить загрузчик, пока ваше приложение получает ваше текущее местоположение. После того, как приложение получит ваше текущее местоположение, вам необходимо вызвать обновление камеры, чтобы переместить вид в ваше текущее местоположение.
Вы можете попробовать, и все должно работать идеально. Помните, что у вас нет позиции для наблюдения. Вы можете просто получить позицию и переместить камеру в это положение после того, как позиция была возвращена.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:location/location.dart';
class Home extends StatefulWidget {
@override
State<Home> createState() => HomeState();
}
class HomeState extends State<Home> {
GoogleMapController mapController;
Location _location = Location();
LocationData _locationData;
watchLocation() async{
_location.onLocationChanged.listen((LocationData currentLocation) {
LatLng latLng = LatLng(currentLocation.latitude, currentLocation.longitude);
CameraUpdate cameraUpdate = CameraUpdate.newLatLngZoom(latLng, 15);
mapController.animateCamera(cameraUpdate);
setState(() {
this._locationData = currentLocation;
});
});
}
@override
void initState() {
super.initState();
watchLocation();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: Stack(
children: <Widget>[
GoogleMap(
myLocationEnabled: true,
mapToolbarEnabled: true,
zoomControlsEnabled: false,
myLocationButtonEnabled: false,
mapType: MapType.normal,
initialCameraPosition: CameraPosition(
target: LatLng(this._locationData?.latitude ?? 6.7008168, this._locationData?.longitude ?? -1.6998494),
zoom: 14.4746,
),
onMapCreated: (GoogleMapController controller) {
setState(() {
mapController = controller;
});
),
)
],
),
);
}
}