#google-maps #flutter #google-maps-api-3
#google-карты #флаттер #google-maps-api-3
Вопрос:
Я пытаюсь создать приложение, которое загружает GoogleMap(), затем после получения широты и долготы пользователя перемещается в это конкретное местоположение.
Мне пришла в голову эта идея (код ниже), но она работает, только если я перезапущу приложение, и если я этого не сделаю, выдает ошибку: animateCamera была вызвана с нулевым значением.
Как это возможно? и как я могу это исправить?
Спасибо за ответ: D
...
var mapController;
...
GoogleMap createMap() {
var initMap = GoogleMap(
onMapCreated: onMapCreated,
initialCameraPosition:
CameraPosition(target: LatLng(47.290542, 8.322641), zoom: 6.7),
);
return initMap;
}
...
void onMapCreated(controller) {
mapController = controller;
}
...
void moveCameraToUserLocation(searchedLocation2) async {
var location = await Geocode().getLatLng(searchedLocation2);
print("moving to: $location");
mapController.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: location,
zoom: 20,
),
),
);
...
build(context) {
return Scaffold(
body: createMap(),
...
Ответ №1:
Судя по тому, как вы описываете проблему, похоже, что вы вызываете функцию animate только при загрузке карты.
Я предлагаю вам создать кнопку, которая будет обрабатывать и запускать функцию анимации и перемещать камеру в местоположение устройства при каждом нажатии.
В следующем фрагменте кода используется ClipOval
кнопка, и внутри OnTap()
события вы можете вызвать метод для получения текущего местоположения устройства, который будет срабатывать при каждом нажатии кнопки.
ClipOval(
child: Material(
color: Colors.green[100], // button color
child: InkWell(
splashColor: Colors.green, // inkwell color
child: SizedBox(
width: 56,
height: 56,
child: Icon(Icons.my_location),
),
onTap: () {
// Add methods here that will be called whenever the button is tapped
mapController.animateCamera(CameraUpdate.newCameraPosition(CameraPosition(
target: LatLng(_currentPosition.latitude, _currentPosition.longitude),
zoom: 17.0)));
setState(() {
allMarkers.add(Marker(
markerId: MarkerId('Current Position'),
draggable: false,
position:
LatLng(_currentPosition.latitude, _currentPosition.longitude)));
});
},
),
),
)
Ответ №2:
Возможно, вы вызываете функцию moveCameraToUserLocation перед созданием карты. Из этой части кода я не могу понять, когда вы вызываете эту функцию, но я предполагаю, что вы вызываете ее из initstate. Если вы хотите вызвать эту функцию сразу после создания виджета, переместите ее в onMapCreated.
void onMapCreated(controller) {
mapController = controller;
moveCameraToUserLocation();
}