您可以使用
RenderBox.globalToLocal方法将全局坐标转换为局部坐标。为了得到
RenderBox,你可以调用
findRenderObject的
BuildContext。
--- a/lib/widgets/temp_picker.dart+++ b/lib/widgets/temp_picker.dart@@ -41,7 +41,12 @@ class _TempPickerState extends State<TempPicker> { return new Container( constraints: new BoxConstraints.expand(), child: new GestureDetector(- onPanUpdate: (details) => setState(() => _tapPos = details.globalPosition),+ onPanUpdate: (details) {+ setState(() {+ RenderBox box = context.findRenderObject();+ _tapPos = box.globalToLocal(details.globalPosition);+ });+ }, child: new CustomPaint(painter: new _TempPainter( minValue: widget.minValue,不过,这还不太正确,因为当设备旋转且
TempPicker窗口小部件的大小更改时,它可能会表现出异常情况。
_tapPos建议您计算并保存
getAngleFromPositionin
的结果,
onPanUpdate并将该角度值传递给
_TempPainter构造函数,而不是将局部偏移存储在中。这样,只要用户当前未触摸屏幕,角度就可以在屏幕尺寸改变时保持不变。



