Flutter 如何知道偏移量是否在圆内

Flutter 如何知道偏移量是否在圆内,flutter,Flutter,在我的代码中,我有带边框的CircleAvatar。我想知道用户是否准确点击边界。为此,我需要检查水龙头是否在大圆(容器)内,而不是在小圆(CircleAvatar)内。 有人知道我怎么查这个吗 Widget build(BuildContext context) { return Listener( child: Container( key: key, padding: EdgeInsets.all(8.0), decoration: Shap

在我的代码中,我有带边框的
CircleAvatar
。我想知道用户是否准确点击边界。为此,我需要检查水龙头是否在大圆(
容器
)内,而不是在小圆(
CircleAvatar
)内。 有人知道我怎么查这个吗

Widget build(BuildContext context) {
  return Listener(
    child: Container(
      key: key,
      padding: EdgeInsets.all(8.0),
      decoration: ShapeDecoration(shape: CircleBorder(), color: Colors.yellow),
      child: CircleAvatar(
        backgroundImage: NetworkImage(widget.imgSrc),
        radius: 60.0,
      ),
    ),
    onPointerDown: (event) {
      if (renderBox == null) {
        renderBox = key.currentContext?.findRenderObject();
      }
      Rect rect = renderBox.paintBounds;
      // todo ......
    },
  );
}

应使用毕达哥尔定理检查偏移是否在圆中:

import 'dart:math';

/// check if a [point] is in a circle of a given [radius]
bool isPointInside(Offset point, double radius) =>
  pow(point.dx, 2) + pow(point.dy, 2) < pow(radius, 2);
import'dart:math';
///检查[点]是否位于给定[半径]的圆中
bool isPointInside(偏移点,双半径)=>
功率(点dx,2)+功率(点dy,2)<功率(半径,2);
对大圆圈和小圆圈执行此操作,并检查结果是否符合您的要求


编辑:按照@randal schwartz的建议删除sqrt以支持pow(radius)

也许这不是最好的方法,但我找到了一些解决方案

Rect bigRect = renderBox.paintBounds.shift(renderBox?.localToGlobal(Offset.zero));
Rect smallRect = bigRect.deflate(padding);
Path path = Path()
  ..fillType = PathFillType.evenOdd
  ..addOval(bigRect)
  ..addOval(smallRect);
if (path.contains(event.position)) { // todo...

p.S.Muldec的解决方案也可以使用,它可以工作,但我正在寻找另一种类型,如
包含

使用sqrt没有意义。。。两边都成直角
pow(point.dx,2)+pow(point.dy,2)
谢谢,但我有绝对坐标的偏移量。因此,对于这个方法,我必须考虑这一点,并改变<代码> dx<代码>和<代码> Dy。如果没有它,方法总是返回false。我试图找到类似于
Rect
类的
contains(Offset Offset)
方法。如果你知道圆心的绝对偏移量,你可以将它减去抽头的偏移量,这个方法就行了。