dart 平移出视图时,Flutter InteractiveViewer子项不可点击

dwbf0jvd  于 2023-05-11  发布在  Flutter
关注(0)|答案(1)|浏览(134)

我对飞行和 dart 还是个新手。我正在尝试使用GraphView库绘制树视图。我能够生成树,平移也工作得很好。主要问题是树节点必须是可点击的,但是一旦树扩展到主窗口大小,“外部”节点就不再是可点击的了。
为了更好地解释这是树。向右平移后,绿色线是initState视图的右边距。这条线左边的所有节点都是可触摸的,而右边的节点是不可触摸的。

我为显示此视图而生成的代码如下:

Widget build(BuildContext context) {
    return InteractiveViewer(
      clipBehavior: Clip.none,
      panEnabled: true,
      minScale: 0.35,
      maxScale: 1,
      boundaryMargin: EdgeInsets.all(double.infinity),
      child: OverflowBox(
        alignment: Alignment.center,
        minWidth: 0.0,
        minHeight: 0.0,
        maxWidth: double.infinity,
        maxHeight: double.infinity,
        child: GraphView(
            algorithm: BuchheimWalkerAlgorithm(
              builder,
              TreeEdgeRenderer(builder),
            ),
            graph: graph,
            paint: Paint()
              ..color = Colors.green
              ..strokeWidth = 1
              ..style = PaintingStyle.stroke,
            builder: (Node node) {
              int a = node.key!.value;
              if (a == 0) {
                return rectangleWidget("ROOT", a, NodeType.ROOT, 99);
              } else {
                AttackTreeNode attackTreeNode =
                    dataManager.rootNode.findNode(a);
                return rectangleWidget(
                    attackTreeNode.name, a, attackTreeNode.nodeType, attackTreeNode.score);
              }
            }),
      ),
    );
  }

感谢您的帮助!

roqulrg3

roqulrg31#

我不知道你是否还需要帮助,我也不知道这是否能解决你的问题。我有一个非常类似的行为,你所描述的,也许是因为同样的原因。请不要对我太苛刻,因为我也是一个Flutter新手。
在我的代码中,我使用了InteractiveViewer中的Table小部件,但由于行为相同或完全相同,我认为这并不重要。
我通过将我的Table小部件作为直接子部件来解决这个问题。早些时候,我把它 Package 在另一个小部件中,这似乎是导致bug的原因。也许你需要删除OverflowBox并将GraphView放在那里。就像这样:

Widget build(BuildContext context) {
    return InteractiveViewer(
      clipBehavior: Clip.none,
      panEnabled: true,
      minScale: 0.35,
      maxScale: 1,
      boundaryMargin: EdgeInsets.all(double.infinity),
      child: GraphView(
            algorithm: BuchheimWalkerAlgorithm(
              builder,
              TreeEdgeRenderer(builder),
            ),
            graph: graph,
            paint: Paint()
              ..color = Colors.green
              ..strokeWidth = 1
              ..style = PaintingStyle.stroke,
            builder: (Node node) {
              int a = node.key!.value;
           if (a == 0) {
            return rectangleWidget("ROOT", a, NodeType.ROOT, 99);
           } else {
             AttackTreeNode attackTreeNode =
                dataManager.rootNode.findNode(a);
            return rectangleWidget(
                attackTreeNode.name, a, attackTreeNode.nodeType, attackTreeNode.score);
           }
        }),
    );
  }

抱歉代码格式不佳。如果这不起作用,我很遗憾没有任何其他选择让你尝试,因为这为我修复了它。如果你还有其他问题,你可以问他们,但我不知道我是否能正确回答他们。
感谢您的阅读和快乐的编码

相关问题