flutter 如何在从列到扩展的路径上使用扩展(例如GestureDetector)

qlvxas9a  于 2023-02-09  发布在  Flutter
关注(0)|答案(1)|浏览(139)

我目前创建了一个编辑器,它允许在二维平面的某些位置插入新项目。
编辑器将项目放置在屏幕上,并将其 Package 在GestureDetector()DragTarget()中,以允许放入新的编辑器项目。
因此,如果用户单击"Expanded()小部件"区域,则经常会出现类似下面的结构,以在属性检查器小部件中显示可编辑的项:

Column(
      children: [
        DragTarget(
          builder: (context, candidateData, rejectedData) {
            return Expanded(
              child: Text( 'X' ),
            );
          },
        )
      ],
    )

这与GestureDetector()一样,会生成以下渲染错误:
ParentDataWidget使用不当。
ParentDataWidget Expanded(flex: 1)希望将FlexParentData类型的ParentData应用于RenderObject,该RenderObject已被设置为接受不兼容类型ParentData的ParentData。
通常,这意味着Expanded小部件有错误的祖先RenderObjectWidget。通常,Expanded小部件被直接放置在Flex小部件中。有问题的Expanded小部件当前被放置在MetaData小部件中。
如果我移除DragTarget(),树会呈现得很好:

Column(
  children: [
    Expanded(
          child: Text( 'X' ),
        )
  ],
)

不用说,任何编译目标都会出现这个问题。
由于编辑器允许像列,卡等小部件下降,我需要一个通用的解决方案。

jucafojl

jucafojl1#

正如文档所述:
使用Expanded小部件可使Row、Column或Flex的子级沿着主轴展开以填充可用空间(例如,对于Row,水平展开;对于Column,垂直展开)。
这意味着Expanded小部件只能作为RowColumnFlex的直接子部件使用,这也是代码段不使用DragTarget的原因,因为在这种情况下,ExpandedColumn的直接子部件。
要解决您的问题,您可以这样做:

Column(
      children: [
        DragTarget(
          builder: (context, candidateData, rejectedData) {
            return Column(
              children: [
                 Expanded(child: Text( 'X' ))
              ]
            );
          },
        )
      ],
    )

你也可以把你的DragTarget打包成一个Expanded widget,没有更多的信息很难帮到你,但是这两种方法至少不会返回错误。

相关问题