【问题标题】:Draw and interact with SVG in Flutter在 Flutter 中绘制 SVG 并与之交互
【发布时间】:2019-12-20 17:34:05
【问题描述】:

我们正在开发一个基于 SVG 输入显示人体的应用程序。这个人体分为几个区域,比如头、左臂、右臂、腹部等。

我们希望在用户点击例如一只手臂时突出显示图像的一个区域。在 Flutter 中实现这样的事情的最佳方法是什么?

我们尝试将 Flare 用于 Flutter,但此库不提供与所显示的人体的直接交互。

有没有更简单的方法:

  • 基于 SVG 渲染主体(图稿在未来的开发中可能会发生变化);
  • 检测点击,例如GestureDetector;
  • 根据点击坐标查找按下区域;

请注意,由于图像的某些部分重叠,简单的框将不起作用。可以看到我们想要达到的效果,我这里点了一只手臂。在它周围画一些可点击的框,效果不好。

提前致谢。

【问题讨论】:

    标签: svg flutter dart flare


    【解决方案1】:

    我通过使用 built_path 库使其工作,该库将 SVG 路径预编译为 Path 对象。然后我们将其包装成一个ClipPath Widget,如下所示:

    return GestureDetector(
        onTap: () => _bodyPartTapped(part),
        child: ClipPath(
            child: Stack(children: <Widget>[
              Container(
                  color: pressedBodyPart == part
                      ? Colors.blue
                      : Colors.transparent),
              CustomPaint(painter: PathPainter(path))
            ]),
            clipper: PathClipper(path)));
    

    如果按下它,它会将身体部位染成蓝色,效果很好。

    我创建了一个完整的示例,可以在这里找到:https://github.com/gi097/flutter_clickable_regions

    【讨论】:

    • 嗨乔瓦尼,我也有基于 svg click 的类似问题。我们如何 1. 钩住 SVG 上的点击动作,并获取被点击元素的 'id'。 2. 从代码中更改 SVG 元素的颜色。
    • @MadhusudhanSahni,看看我的例子github.com/gi097/flutter_clickable_regions :)
    • 是的,阅读自述文件。您需要运行flutter packages pub run build_runner build 来生成文件。
    • 使用颤振稳定分支。 master 分支目前不适用于库。
    • 我希望我能不止一次地投票!谢谢乔瓦尼,不仅发布了答案,而且还做了一个很棒的演示。太多人愿意寻求帮助,但如果他们自己解决问题,他们不会想到发布可以帮助他人的答案。这是一个令人耳目一新的变化。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    相关资源
    最近更新 更多