Пытаюсь реализовать рисование области пальцем. Либо некорректно работает преобазование в методе screenToWorld, либо я что-то делаю не так.
zoom установленный по умолчанию.
import 'package:flutter/material.dart';
import 'package:yandex_maps_mapkit/mapkit.dart';
import 'package:yandex_maps_mapkit/yandex_map.dart';
class MainPage extends StatefulWidget {
const MainPage({Key? key}) : super(key: key);
@override
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
MapWindow? _mapWindow;
final List<Point> _polygonPoints = [];
bool _isDrawing = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: GestureDetector(
onLongPressStart: _handleLongPressStart,
onLongPressMoveUpdate: _handleLongPressMoveUpdate,
onLongPressEnd: _handleLongPressEnd,
child: YandexMap(
onMapCreated: _onMapCreated,
),
),
);
}
void _onMapCreated(MapWindow mapWindow) {
_mapWindow = mapWindow;
}
void _handleLongPressStart(LongPressStartDetails details) {
final RenderBox renderBox = context.findRenderObject() as RenderBox;
print(renderBox.localToGlobal(details.globalPosition));
final Point? point = _screenPointToMapPoint(renderBox.globalToLocal(details.globalPosition));
setState(() {
_polygonPoints.clear();
_polygonPoints.add(point!);
_isDrawing = true;
});
}
void _handleLongPressMoveUpdate(LongPressMoveUpdateDetails details) {
final RenderBox renderBox = context.findRenderObject() as RenderBox;
final Point? point = _screenPointToMapPoint(renderBox.globalToLocal(details.localPosition));
if (_isDrawing) {
setState(() {
_polygonPoints.add(point!);
});
}
}
Point? _screenPointToMapPoint(Offset localPosition) {
final point = ScreenPoint(x: localPosition.dx, y: localPosition.dy);
print(point);
print(_mapWindow!.screenToWorld(point));
return _mapWindow!.screenToWorld(point);
}
void _handleLongPressEnd(LongPressEndDetails details) {
if (_isDrawing) {
setState(() {
_isDrawing = false;
if (_polygonPoints.length > 3) {
_drawPolygon();
}
});
}
}
void _drawPolygon() {
if (_mapWindow != null && _polygonPoints.isNotEmpty) {
final polygon = Polygon(
LinearRing(_polygonPoints), []
);
_mapWindow!.map.mapObjects.addPolygon(polygon);
}
}
}
Пытаюсь реализовать рисование области пальцем. Либо некорректно работает преобазование в методе screenToWorld, либо я что-то делаю не так. zoom установленный по умолчанию.
в итоге область появляется ближе к верхнему левому углу при рисовании ближе к центру.