yandex map kit flutter
Использую карту yandex map kit. В приложении при перемещении по карте меняются координаты, и в центр где они определяются нужно добавить маркер. Но я не знаю как это сделать, документации на эту тему не нашел. Кто делал такое уже?!
@override
_MapScreenState createState() => _MapScreenState();
}
class _MapScreenState extends State<MapScreen> {
final mapControllerCompleter = Completer<YandexMapController>();
AppLatLong? _currentLocation; // Сохранение текущего местоположения
@override
void initState() {
super.initState();
_initPermission().ignore();
}
Future<Uint8List> _rawPlacemarkImage() async {
final recorder = PictureRecorder();
final canvas = Canvas(recorder);
const size = Size(100, 50);
final fillPaint = Paint()
..color = Colors.blue[100]!
..style = PaintingStyle.fill;
final strokePaint = Paint()
..color = Colors.black
..style = PaintingStyle.stroke
..strokeWidth = 1;
const radius = 20.0;
final circleOffset = Offset(size.height / 2, size.width / 2);
canvas.drawCircle(circleOffset, radius, fillPaint);
canvas.drawCircle(circleOffset, radius, strokePaint);
final image = await recorder.endRecording().toImage(size.width.toInt(), size.height.toInt());
final pngBytes = await image.toByteData(format: ImageByteFormat.png);
return pngBytes!.buffer.asUint8List();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Текущее местоположение'),
),
body: Column(
children: [
Expanded(
child: YandexMap(
onMapCreated: (controller) {
mapControllerCompleter.complete(controller);
},
onCameraPositionChanged: (cameraPosition, _, __) {
_updateLocationFromCameraPosition(cameraPosition.target);
icon: PlacemarkIcon.single(PlacemarkIconStyle(
image: BitmapDescriptor.fromAssetImage('lib/assets/place.png'),
rotationType: RotationType.rotate
));
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
_currentLocation != null
? 'Широта: ${_currentLocation!.lat}, Долгота: ${_currentLocation!.long}'
: 'Координаты не определены',
style: TextStyle(fontSize: 16),
),
),
],
),
);
}
/// Обновление координат при изменении позиции камеры
void _updateLocationFromCameraPosition(Point target) {
setState(() {
_currentLocation = AppLatLong(lat: target.latitude, long: target.longitude);
});
}
/// Проверка разрешений на доступ к геопозиции пользователя
Future<void> _initPermission() async {
if (!await LocationService().checkPermission()) {
await LocationService().requestPermission();
}
await _fetchCurrentLocation();
}
/// Получение текущей геопозиции пользователя
Future<void> _fetchCurrentLocation() async {
AppLatLong location;
const defLocation = MoscowLocation();
try {
location = await LocationService().getCurrentLocation();
} catch (_) {
location = defLocation;
}
setState(() {
_currentLocation = location;
});
_moveToCurrentLocation(location);
}
/// Метод для показа текущей позиции
Future<void> _moveToCurrentLocation(AppLatLong appLatLong) async {
(await mapControllerCompleter.future).moveCamera(
animation: const MapAnimation(type: MapAnimationType.linear, duration: 1),
CameraUpdate.newCameraPosition(
CameraPosition(
target: Point(
latitude: appLatLong.lat,
longitude: appLatLong.long,
),
zoom: 12,
),
),
);
}
}```