我已经搜索了很多次,但没有找到可靠的答案,因此,如果这是一个骗子,我会诚实地尝试。
我有一个正在重写的应用程序,并且正在远离基于html的混合平台(特别是Trigger.io);快速地在Flutter和Dart中进行重写。
该应用程序的一部分包括一个非常简单的屏幕,用户可以在该屏幕上单击人体图像,并通过图像地图获取身体部位(右前臂,左膝盖,头部,等等)。
我根本无法在Flutter中找到这种行为和功能的类似物。我是否因为完全想不到而错过了一些简单的事情?
非常感谢。
答案 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,
);
}
}