Flutter 如何在定位小部件中获得图像的偏移量,它比颤振中的设备大
我正在努力做到这一点: SVG文件加载到画布上。OnPanUpdate im更改设备上图片的位置。我试图在这个svg上放置一些标记,但我无法获得正确的点击位置 小部件:Flutter 如何在定位小部件中获得图像的偏移量,它比颤振中的设备大,flutter,position,flutter-layout,gesture-recognition,Flutter,Position,Flutter Layout,Gesture Recognition,我正在努力做到这一点: SVG文件加载到画布上。OnPanUpdate im更改设备上图片的位置。我试图在这个svg上放置一些标记,但我无法获得正确的点击位置 小部件: @override Widget build(BuildContext context) { return GestureDetector( onLongPressEnd: _handlePutMarker, onPanUpdate: _handlePanUpdate, child
@override
Widget build(BuildContext context) {
return GestureDetector(
onLongPressEnd: _handlePutMarker,
onPanUpdate: _handlePanUpdate,
child: Scaffold(
backgroundColor: Colors.cyan[100],
body: SafeArea(
child: Container(
height: double.infinity,
width: double.infinity,
child: Stack(
overflow: Overflow.visible,
children: <Widget>[
Positioned(
key: _keyRed,
top: top - (MediaQuery.of(context).size.height / 4),
left: left - (MediaQuery.of(context).size.width / 6),
width: 100 * ratio,
child: FutureBuilder<DrawableRoot>(
future: svg.fromSvgString(rawSvg, rawSvg),
builder: (context, snapshot) {
if (snapshot.hasData) {
return CustomPaint(
painter: SvgPainter(snapshot.data, top, left, ratio,
markers, markerImage),
);
}
return Container();
},
),
),
Positioned(
left: 0,
top: 0,
child: Row(
children: <Widget>[
IconButton(
icon: Icon(Icons.add_circle_outline),
onPressed: _handleZoomIn,
),
IconButton(
icon: Icon(Icons.remove_circle_outline),
onPressed: _handleZoomOut,
),
IconButton(
icon: Icon(Icons.pause_circle_outline),
onPressed: () {
markers.removeLast();
},
),
],
),
),
],
),
),
),
),
);
}
}
PutMarker:
void _handlePutMarker(LongPressEndDetails details) {
setState(() {
final RenderBox box = context.findRenderObject();
final Offset localOffset = box.globalToLocal(details.globalPosition);
markers.add(Offset(localOffset.dx, localOffset.dy));
});
}
画布:
@override
void paint(Canvas canvas, Size size) async {
try {
size = Size(data.viewport.size.width, data.viewport.size.height);
data.scaleCanvasToViewBox(canvas, Size(1000 * ratio, 1000 * ratio));
data.draw(
canvas,
ColorFilter.srgbToLinearGamma(),
Rect.fromLTWH(0, 0, 2148, 814),
);
Paint paint = Paint()..color = Colors.red;
for (int i = 0; i < markers.length; i++) {
canvas.drawImage(markerImage, markers[i], paint);
}
@覆盖
无效绘制(画布,大小)异步{
试一试{
大小=大小(data.viewport.size.width,data.viewport.size.height);
scaleCanvasToViewBox(画布,大小(1000*比率,1000*比率));
data.draw(
帆布,
ColorFilter.srgbToLinearGamma(),
来自LTWH的矩形(0,0,2148,814),
);
油漆油漆=油漆()…颜色=颜色。红色;
for(int i=0;i
@override
void paint(Canvas canvas, Size size) async {
try {
size = Size(data.viewport.size.width, data.viewport.size.height);
data.scaleCanvasToViewBox(canvas, Size(1000 * ratio, 1000 * ratio));
data.draw(
canvas,
ColorFilter.srgbToLinearGamma(),
Rect.fromLTWH(0, 0, 2148, 814),
);
Paint paint = Paint()..color = Colors.red;
for (int i = 0; i < markers.length; i++) {
canvas.drawImage(markerImage, markers[i], paint);
}