Flutter中类似Image Map的功能?

时间:2019-05-31 03:12:38

标签: flutter dart

我已经搜索了很多次,但没有找到可靠的答案,因此,如果这是一个骗子,我会诚实地尝试。

我有一个正在重写的应用程序,并且正在远离基于html的混合平台(特别是Trigger.io);快速地在Flutter和Dart中进行重写。

该应用程序的一部分包括一个非常简单的屏幕,用户可以在该屏幕上单击人体图像,并通过图像地图获取身体部位(右前臂,左膝盖,头部,等等)。

我根本无法在Flutter中找到这种行为和功能的类似物。我是否因为完全想不到而错过了一些简单的事情?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以将Image包装在GestureDetector中,并指定onTapDown(或onTapUp)回调,这些回调可以检查所点击的坐标并采取相应的措施。

(要将全局坐标转换为局部坐标,请参见:flutter : Get Local position of Gesture Detector。)

这是一个粗略的尝试:

class ImageMap extends StatelessWidget {
  const ImageMap({
    Key key,
    @required this.image,
    @required this.onTap,
    @required this.regions,
  }) : super(key: key);

  final Widget image;
  final List<Path> regions;

  /// Callback that will be invoked with the index of the tapped region.
  final void Function(int) onTap;

  void _onTap(BuildContext context, Offset globalPosition) {
    RenderObject renderBox = context.findRenderObject();
    if (renderBox is RenderBox) {
      final localPosition = renderBox.globalToLocal(globalPosition);
      for (final indexedRegion in enumerate(regions)) {
        if (indexedRegion.value.contains(localPosition)) {
          onTap(indexedRegion.index);
          return;
        }
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTapDown: (details) => _onTap(context, details.globalPosition),
      child: image,
    );
  }
}