You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Пытаюсь реализовать рисование области пальцем. Либо некорректно работает преобазование в методе 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 установленный по умолчанию.
в итоге область появляется ближе к верхнему левому углу при рисовании ближе к центру.
The text was updated successfully, but these errors were encountered: